#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 约瑟夫环
最新推荐文章于 2019-07-20 04:44:15 发布