问题 3865 --Joseph(完善程序)

3865: Joseph(完善程序)★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 76  解决: 64
[提交][状态][命题人:]

题目描述

原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。

现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。

#include <cstdio>
long k, m, begin;
int check(long remain) {
    long result = (__[1]__) % remain;
    if (__[2]__) {
        begin = result; return 1;
    }
    else return 0;
}
int main() {
    long i, find = 0;
    scanf("%ld", &k);
    for (m = k; __[3]__; m++) {
        find = 1; begin = 0;  
        for (i = 0; i < k; i++)
            if (!check(__[4]__)) {
                find = 0; break;
            }
    }
    printf("%ld\n", __[5]__);  return 0;
}

输入

仅有的一个数字是k(0 < k < 14)。

输出

得最先出列的k个人都是坏人的m的最小值。

样例输入
Copy
4
样例输出
Copy
30

提示

来源

 

[提交][状态]