本文主要是介绍Josephus 问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
有 𝑛 个人围成一个圈,依次标号 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;
}
这篇关于Josephus 问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!