其他分享
首页 > 其他分享> > 【模拟】变态杀人狂(约瑟夫问题)

【模拟】变态杀人狂(约瑟夫问题)

作者:互联网

描述

变态杀人狂小明想到一个杀人游戏
游戏规则如下:
小明抓了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;
}

Skynamer 发布了122 篇原创文章 · 获赞 0 · 访问量 4620 私信 关注

标签:输出,小明,int,变态,样例,约瑟夫,编号,杀人狂
来源: https://blog.csdn.net/Skynamer/article/details/104180984