约瑟夫问题

来源:互联网 发布:好用的洗面奶知乎 编辑:程序博客网 时间:2024/06/03 22:49

N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈,...输出依次出圈的人的编号。N,M由键盘输入。

#include<cstdio>#include<iostream>using namespace std;const int p=20000;bool a[p+1];int main(){for(int i=0;i<=p;i++)a[i]=true;int N,M;cin>>N>>M;int count=0;//报数int out=0;//记录已经出圈的人数int t=0;//指针遍历数组do{t++;if(t==N+1) t=1;if(a[t]==true) count++;if(count==M){count=0;cout<<t<<" ";a[t]=false;out++;}}while(out<N);return 0;}