题目1356:孩子们的游戏(圆圈中最后剩下的数)

来源:互联网 发布:王侯将相宁有种乎全文 编辑:程序博客网 时间:2024/05/16 12:21

// 设 K_i 为剩余 i 个人时,以刚出去的那个人为0号开始,编号为K的人(他)。
那么在剩余 i+1 个人时,以当时刚出局的人为0号开始,他的编号为T = ((K+M-1)%(i+1)) + 1。
因为 i+1 个人时编号为 ((M-1)%(i+1))+1 个人是 i 人时编号为 0 的刚出局者,第K个加上K就行了。
这样倒推道 i+1 = N 即可

// 其实就是约瑟夫环吧!

#include <stdio.h>

int N, M;
int main()
{
        while (scanf("%d", &N), N) {
                scanf("%d", &M);
                int ans = 1, i;
                for (i=1; i<N; i++) {
                        ans = ((ans+M-1) % (i+1)) + 1;
                }
                printf("%d\n", ans);
        }
        return 0;
}
0 0
原创粉丝点击