//5_1_1: 小孩报数问题,即约瑟夫问题 POJ3750
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
short i,N,w,s,cnt = 1,tag[64] = {0};
char c,name[64][15];
cin >> N;
for(i = 0;i < N;i ++) cin >> name[i];
cin >> w >> c >> s;
w --; //逻辑序和数组序的转化
while(cnt <= N)
{
i = 0;
while(1)
{
if(tag[w] == 0) i ++; //表示还没有出列
if(i == s)
{
tag[w] = cnt; //tag中保存了输出的顺序
cout << name[w] << endl;
w = (w + 1) % N;
break;
}
w = (w + 1) % N;
}
cnt++;
}
return 0;
}
/*测试结果:通过POJ3750检测
5
Xiaoming
Xiaohua
Xiaowang
Zhangsan
Lisi
2,3
Zhangsan
Xiaohua
Xiaoming
Xiaowang
Lisi
请按任意键继续. . .
*/POJ3750 小孩报数问题
最新推荐文章于 2019-01-13 11:45:31 发布
本文介绍了一个经典的约瑟夫问题,并提供了一个简洁的C++实现方案。该方案使用数组来跟踪小孩的状态,通过循环遍历的方式找到指定规则下每次被选出的小孩,直至所有小孩都被选中。
6007

被折叠的 条评论
为什么被折叠?



