有 𝑛 个人围成一个圈,依次标号 0 至 𝑛 − 1。从 0 号开始,依次 0,1,0,1,… 交替报数,报到 1 的人会离开,直至圈中只剩下一个人。求最后剩下人的编号。
#include <iostream>
using namespace std;
bool b[1000010]={0};
int main(){//模拟程序
int n;
cin>>n;
int cnt=0;//淘汰数
int i=0;
bool next=0;
while(cnt!=n-1){
if(b[i]==0){
b[i]=next;
if(next==1)cnt++;
next=!next;
}
i=(i+1)%n;
if(i==0){
for(int j=0;j<n;j++)cout<<b[j];
cout<<endl;
}
}
for(int j=0;j<n;j++)cout<<b[j];
for(int j=0;j<n;j++)if(b[j]==0)cout<<endl<<j+1<<endl;
return 0;
}