幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。
每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。
现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。
输入:
小朋友的个数(<=50) 要被练习的数字
输出:
最终被留下的小朋友的序号
说明:
如“要被练习的数字”是5,则每次数到5的同学要退出该游戏
#include <stdio.h>
int main() {
int m, n, i, j = 0, num = 0, a[55] = {};
scanf("%d %d", &m, &n);
for (i = 1; i <= m; i++) {
a[i] = i;
}
for (i = 1; i <= m; i++) {
if (a[i] == 0 && i < m)
continue;
if (a[i] >= 1 && a[i] <= m)
j = (j + 1) % n;
if (j == 0)
a[i] = 0, num++;
if (num == m - 1)
break;
if (i == m && num < m - 1)
i = 0;
}
for (i = 1; i <= m; i++) {
if (a[i] != 0)
break;
}
printf("The left child is NO %d.\n", i);
return 0;
}
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |