题目1356:孩子们的游戏(圆圈中最后剩下的数)
2014-03-27 22:51
239 查看
// 设 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;
}
那么在剩余 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;
}
相关文章推荐
- 九度 题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 九度 题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 九度_题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 【剑指Offer面试编程题】题目1356:孩子们的游戏(圆圈中最后剩下的数)--九度OJ
- 【剑指Offer面试编程题】题目1356:孩子们的游戏(圆圈中最后剩下的数)--九度OJ
- 题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 九度OJ-题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 九度 题目1356:孩子们的游戏(圆圈中最后剩下的数)
- 1356孩子们的游戏(圆圈中最后剩下的数)--即约瑟夫环
- 剑指Offer - 九度1356 - 孩子们的游戏(圆圈中最后剩下的数)
- 题目30:孩子们的游戏(圆圈中最后剩下的数)
- 九度OJ 1356:孩子们的游戏(圆圈中最后剩下的数) (约瑟夫环)
- 九度OJ 1356:孩子们的游戏(圆圈中最后剩下的数) (约瑟夫环)
- 剑指offer | 训练题45:孩子们的游戏(圆圈中最后剩下的数)
- 孩子们的游戏(圆圈中最后剩下的数)
- 孩子们的游戏(圆圈中最后剩下的数)&约瑟夫问题I
- 孩子们的游戏(圆圈中最后剩下的数)(java版)
- 孩子们的游戏(圆圈中最后剩下的数)
- 约瑟夫环——孩子们的游戏(圆圈中最后剩下的数)
- 《剑指offer》-孩子们的游戏(圆圈中最后剩下的数)