用C语言解释以下问题:一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到M,凡报到M的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
时间: 2024-02-21 08:00:56 浏览: 160
以下是用C语言实现的解决方案:
```c
#include <stdio.h>
int main()
{
int n, m, i, s = 0;
printf("请输入候选猴子的数量:");
scanf("%d", &n);
printf("请输入每轮报数的数字:");
scanf("%d", &m);
int a[n];
for (i = 0; i < n; i++) {
a[i] = i + 1;
}
i = 0;
while (n > 1) {
if (a[i] != 0) {
s++;
}
if (s == m) {
a[i] = 0;
s = 0;
n--;
}
i++;
if (i == n) {
i = 0;
}
}
for (i = 0; i < n; i++) {
if (a[i] != 0) {
printf("第%d号猴子当选猴王\n", a[i]);
}
}
return 0;
}
```
解释:首先用户输入候选猴子的数量n和每轮报数的数字m,然后使用数组a存储每只猴子的编号。接着进入循环,每次循环都对当前猴子的编号进行判断,如果猴子的编号不为0,则累加报数数字s。如果s等于m,则将当前猴子的编号设为0,表示该猴子退出圈子,同时n的数量减1。接着i加1,如果i等于n,则将i设为0,表示从下一个猴子开始报数。当n等于1时,退出循环,并输出剩下的一只猴子的编号,即为当选猴王的猴子的编号。
阅读全文