背景: 在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。约瑟夫和他的朋友不想死那么早,于是他希望你帮忙确定这些人自杀的顺序,以便他们自己最后自杀。
由于约瑟夫经常坑队友一起自杀,所以需要应对不同的情况,即给定不同的n和k,要求输出每个人被杀死的顺序。
输入格式
一行两个数,第一个表示人数n,第二个表示报数到第k个人需要自杀
输出格式
一行n个数,表示这些人自杀的顺序
样例
####样例输入
4 2
Copy
####样例输出
4 1 3 2
#include<iostream>#include<cmath>#include<cstdio>using namespace std;const int N=1e3+10;int main(){int a[N],ans[N];int n,k,m;cin>>n>>k;m=n;memset(a,0,sizeof(a));memset(ans,0,sizeof(ans));int fg=0;for(int i=0;m;i=(i+1)%n){fg+=!a[i];if(fg==k){a[i]=1;m--;ans[i]=n-m;fg=0;}}for(int i=0;i<n;i++){if(i==n-1)printf("%d\n",ans[i]);elseprintf("%d ",ans[i]);}return 0;}
如果觉得《杀人游戏-约瑟夫问题》对你有帮助,请点赞、收藏,并留下你的观点哦!