题目链接:
Description
某天,无聊的实验室,silent wit 队想出了一个游戏。游戏是这样子的,首先让实验室所有的队员排成一圈,首尾相接。然后随机产生一个数m。队员逆时针开始报数,1,2…m。报到m的队员退出游戏,下一个队员重新从1开始报,直到只剩下最后一个,就是这游戏的最后胜利者。
现在告诉你实验室总的队员个数n(标号为1..n),和这个随机数m。李队长想知道从1号队员开始报数,到最后谁会是最后的胜利者呢。希望你通过编程能够告诉他答案。
Input
输入只有一行,两个整数n和m,其中 n,m <= 100。
Output
输出只有一个正整数,为最后胜利者的编号。
Sample Input
5 2
3
Time Limit:1000MS Memory Limit:65536K
Total Submit:14 Accepted:7
代码:
#include <stdio.h>
bool a[101];
int main(void)
{
int n, m, N = 0, pi = 0, nn = 0;
scanf("%d%d", &n, &m);
while (1)
{
if (a[pi + 1] == 0)
{
++pi;
++nn;
if ((nn % m) == 0)
{
a[pi] = 1;
nn = 0;
++N;
}
if (pi == n)
pi = 0;
}
else
{
++pi;
if (pi == n)
pi = 0;
}
if (N == n - 1)
break;
}
for (pi = 1; pi < n + 1; ++pi)
{
if (!a[pi])
{
printf("%d\n", pi);
break;
}
}
return 0;
}