小珂的游戏
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 。现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1。现在要求,在踢掉第一个好人前,必需把所有的坏人踢掉,问,给定一个k,求满足这个要求的最小的m,现在希望你写一个程序,快速的帮助小珂,计算出来这个m。
-
输入
- 每行一个整数k(k<15),0表示输入结束.总测试数据的组数不多于200. 输出
- 各个组对应的最小的m,换行结束。 样例输入
-
3 4 0
样例输出
-
5
30
-
//nyoj 191 小珂的游戏 //ans[i]:每次重新编号后的编号, 顺序从小到大;Joseph 边计算边打表边打表,用 //ans[i] = (ans[i-1]+m-1)%(n-i+1) #include <stdio.h> int main() { int Joseph[16] = {0}, ans[16], i, k, n, m; while(scanf("%d", &k) && k != 0) { if(Joseph[k]) { printf("%d\n", Joseph[k]); continue; } n = 2*k; ans[0] = 0; m = 1; for(i = 1; i <= k; i++) { ans[i] = (ans[i-1]+m-1)%(n-i+1); if(ans[i] < k) { m++; i = 0; } } Joseph[k] = m; printf("%d\n", m); } return 0; }