背景: 在罗马人占领乔塔帕特后,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]);
else
printf("%d ",ans[i]);
}
return 0;
}