有N只猴子围成一圈,每只猴子从1到N依次编号。打算从中选出一个大王,经过协商,决定出选大王的规则:从第一个猴子开始循环报数,数到M的猴子出圈,最后剩下来的就是大王。
C代码:
int king(int, int);
int main()
{
int n = 0;
int m = 0;
scanf("%d %d",&n,&m);
printf("The king is %d\n",king(n, m));
}
int king(int n, int m)
{
int i = 0;
int j = 1;
int count = m;
int monkey[1000] = { 0 };
for (i = 1; i <= n; i++) //初始化猴子
{
monkey[i] = 1; //是1的不淘汰
}
for (i = 1; i < n; i++) //每次循环淘汰一只,淘汰n-1只
{
count = m;
while (count != 0) //报完数时停止
{
if (monkey[j] != 0) //淘汰的不报数
{
count--;
}
j++;
if (j > n) //到了最后一只猴子
{
j = 1;
}
}
int lose = (j == 1) ? n : j - 1;
monkey[lose] = 0; //值为0则被淘汰
printf("%d Monkey failed.\n", lose);
}
for (j = 1; j <= n; j++)
{
if (monkey[j])
break;
}
return j;
}
这篇博客介绍了猴子选大王的逻辑,即每轮报数到M的猴子出局,最终剩下的猴子成为大王。给出了一段C代码实现这个过程,通过循环和计数来模拟猴子的淘汰,最终找出获胜的猴子编号。

6621

被折叠的 条评论
为什么被折叠?



