#include <iostream>
using namespace std;
/*
*约瑟夫环问题,解决方法1.循环列表 解决方法2.迭代,使用jose(n-1,m)获胜者的序号推出它在jose(n,m)的序号!!!
*/
// 约瑟夫环问题,序号从0开始;
//int jose(int n, int m) {
// if(n == 1)
// return 0;
// else
// return (jose(n-1, m) + m) % n;
//}
// 约瑟夫环问题,序号从1开始;
int jose(int n, int m) {
if(n == 1)
return 1;
else
return (jose(n-1, m) + m -1) % n + 1;
}
int satisfy(int so) {
for(int i = 1; ; i++)
if(jose(so, i) ==1)
return i;
}
int main() {
int si;
while(cin >> si && si !=0) {
int res = satisfy(si-1);
cout << res << endl;
}
return 0;
}zoj 1088 约瑟夫环
最新推荐文章于 2023-04-08 21:23:16 发布
本文探讨了约瑟夫环问题,并提供了一种递归解决方案。通过递归函数计算特定条件下最后一个幸存者的编号,同时介绍了如何寻找使指定编号成为最后幸存者的条件。
2115

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



