题目链接: http://poj.org/problem?id=1012
题目分析:
经典的约瑟夫环问题。
我在这里使用数组来实现算法,还可以通过循环链表来实现,也很简单。
源代码:
/*约瑟夫环*/
#include <iostream>
using namespace std;
int main()
{
int Joseph[14] = {0}; //Joseph环
int k;
while(cin>>k)
{
if (k == 0)
{
break;
}
if (Joseph[k])
{
cout<<Joseph[k]<<endl;
continue;
}
int num; //人数
num = 2 * k;
int kill[30] = {0}; //杀掉的人
int m = 1; //报数
for (int i = 1; i <= k; i++)
{
kill[i] = (kill[i - 1] + m - 1) % (num - i + 1); //从1开始计数计算Joseph环算法
if (kill[i] < k) //杀死的是好人
{
m ++;
i = 0;
}
}
Joseph[k] = m;
cout<<m<<endl;
}
return 0;
}