您的位置:首页 > 其它

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

2014-03-27 22:51 211 查看
// 设 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: