您的位置:首页 > 其它

POJ 2244 约瑟夫问题的变形 已知最后胜利者逆推模拟

2010-11-20 00:04 459 查看
#include <iostream>
using namespace std;
//要求第一个人就必须报数,因此第一个人总是最先被删除的。
//因此可以把该问题看成是n-1个人的问题。题目就转变为,
//在n-1个人的规模下,满足0号是最后胜利者的最小的M。
int main(){
	int i,n,m,k;
	while(cin>>n,n){
		for(m = 1;;m++)
		{
			k = 0;
			for (i = 2; i < n;i++)
				k = (k+m)%i;//k是每次的最后胜利者,向前逆推被删者
				if (k == 0)
				{
					cout<<m<<endl;
					break;
				}
		}
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: