您的位置:首页 > 其它

POJ1012 Joseph

2013-05-13 23:39 309 查看
题目链接: 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: