用c语言解决猴子选大王问题。有m个猴子围成一图,每个有一个编号,编号从1到m。打算从中选出一个大王,经过协商,决定选大王的规则如下:从第一个开始,每隔n个,数到的猴子出图,最后剩下来的就是大王。
时间: 2024-05-16 22:18:13 浏览: 21
下面是用C语言解决猴子选大王问题的代码:
```c
#include <stdio.h>
int main()
{
int m, n, i, j, k, a[1000 printf("请输入猴子的个数m和隔几只猴子选一只n:\n");
scanf("%d%d", &m, &n);
// 初始化猴子编号
for (i = 0; i < m; i++)
{
a[i] = i + 1;
}
// 选大王
i = 0;
while (m > 1)
{
j = 0;
for (k = 0; k < n - 1; k++)
{
// 找到下一个要数的猴子
while (a[i] == 0)
{
i = (i + 1) % m;
}
i = (i + 1) % m;
}
// 删除出局的猴子
while (a[i] == 0)
{
i = (i + 1) % m;
}
a[i] = 0;
m--;
// 找到下一个猴子开始数
while (a[i] == 0)
{
i = (i + 1) % m;
}
}
// 输出大王的编号
for (i = 0; i < m; i++)
{
if (a[i] != 0)
{
printf("大王的编号是:%d\n", a[i]);
break;
}
}
return 0;
}
```
代码思路:
1. 先输入猴子的个数m和隔几只猴子选一只n。
2. 初始化猴子的编号,从1到m。
3. 从第一个猴子开始数,每隔n只猴子,就将当前猴子出局,直到只剩下一只猴子为止。
4. 输出剩下的那只猴子的编号,即为大王。
注意事项:
1. 为了方便,这里用数组a来存储猴子的编号,删除出局的猴子时,将其编号赋值为0。
2. 当只剩下一只猴子时,数组a中只有一个元素不为0,输出其编号即可。
3. 数组a中的元素下标范围是0到m-1。