c++中的jesephus问题

来源:百度知道 编辑:UC知道 时间:2024/05/11 23:54:35
编号为1~N的N个人按顺时针方向围坐一圈,每人持有一密码(正整数)。选任一正整数M做报数上限,从第一个人开始顺时针从一开始报数,报到M停止,此人出列,并将其密码做新的M从下一个开始重新报数,直到所有人都出列。编程求出列次序。

#include <iostream.h>

void main()
{
const int num=10;
int interval;
int a[num];
for(int i=0; i<num; i++)
a[i]=i+1;
cout <<"please input the interval: ";
cin >>interval;
for(i=0; i<num; i++)
cout <<a[i] <<",";
cout <<endl;
int k=1;
i=-1;
while(1){
for(int j=0; j<interval; ){
i=(i+1)%num;
if(a[i]!=0)
j++;
}
if(k==num) break;
cout <<a[i] <<",";
a[i]=0;
k++;
}
cout <<"\nNo." <<a[i] <<" boy've won.\n"; }