一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王? 用C语言编写代码解决上述问题
时间: 2024-03-22 07:42:54 浏览: 66
以下是用C语言编写的解决上述问题的代码:
```c
#include <stdio.h>
int main() {
int n, i, k, m = 0;
printf("input n: ");
scanf("%d", &n);
int a[n];
for (i = 0; i < n; i++) {
a[i] = i + 1; //初始化猴子编号
}
i = 0; //从第1个猴子开始报数
k = 0; //报数到3的猴子数量
while (k < n - 1) { //只要还有多于1只猴子在圈中
if (a[i] != 0) { //如果这只猴子还在圈中
m++; //报数加1
if (m == 3) { //如果报数到3
a[i] = 0; //这只猴子退出圈子
k++; //退出圈子的猴子数量加1
m = 0; //报数清零
}
}
i++; //下一只猴子报数
if (i == n) { //如果已经报完一轮
i = 0; //从第1只猴子开始报数
}
}
for (i = 0; i < n; i++) { //找出剩下的猴子
if (a[i] != 0) {
printf("king: %d\n", a[i]); //输出猴王的编号
}
}
return 0;
}
```
程序中,使用一个整型数组`a`来存储猴子的编号,初始化猴子的编号,然后从第1个猴子开始报数,每次报数加1,当报数到3时,这只猴子退出圈子,将`a[i]`置为0,退出圈子的猴子数量加1,报数清零。当退出圈子的猴子数量等于`n-1`时,只有1只猴子留在圈中,这只猴子即为猴王,输出其编号即可。
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)