【模拟】变态杀人狂(约瑟夫问题)
作者:互联网
描述
变态杀人狂小明想到一个杀人游戏
游戏规则如下:
小明抓了n个人
对这n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出每次被杀的人的编号
注意最后一个活着的人不用输出
输入
多组测试数据,输入n和m值。1<n,m<200,EOF结束
输出
输出每次被杀的人的编号 注意 最后一个人不用输出
样例输入
5 3
样例输出
3
1
5
2
分析:
用数组模拟整个过程。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,a[201];
while(cin>>n>>m)
{
for (int i=1;i<n;i++) a[i]=i+1;
a[n]=1;
int w=n;
for (int i=1;i<=n;i++)
{
for (int j=1;j<m;j++) w=a[w];//找到下一个。
if (i!=n) cout<<a[w]<<endl;
a[w]=a[a[w]];//被杀的人跳过,继承关系。
}
}
return 0;
}
标签:输出,小明,int,变态,样例,约瑟夫,编号,杀人狂 来源: https://blog.csdn.net/Skynamer/article/details/104180984