约瑟夫问题
题目:有M个人,其编号分别为1-M。这M个人按顺序排成一个圈(如图)。现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人出列为止。
代码:
#include<iostream>
using namespace std;
int main()
{
int n,m,k=1,s=1,u;
cin>>m>>n;
int a[m];
for(int b=0;b<m;b++){
a[b]=1;
}
for(int p=0;p<m;p++){
for(s=1;s<=n;u++){
if(s==n&&a[k-1]!=2){
a[k-1]=2;
cout<<k<<" ";
break;
}
if(a[k-1]==1){
s++;
}
if(k==m){
k=1;
}else{
k++;
}
}
}
return 0;
}