用C语言编写问题描述:一堆猴子都有编号,编号是1,2,3 ...m。,这群猴子(m个) 按照1-m的顺序围坐一圈,从1开始数数,每数到第n个,该猴子就要 离开此圈。离开此圈的下一只猴子又从1开始数,每数到第n个,该猴子就要 离开此圈。这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为 大王。 2)输入数据:输入m,n (m,n 为整数,n<m) 3)输出形式:中文提示:按照m个猴子,数n 个数的方法,输出为大王的猴 子是几号,并且输出离开圈的猴子次序。
时间: 2023-12-10 22:41:15 浏览: 207
以下是用C语言编写的程序:
```c
#include <stdio.h>
int main() {
int m, n, i, k, monkey[500]; // 假设最多有500只猴子
printf("请输入猴子总数m和每数n个猴子踢出圈:");
scanf("%d%d", &m, &n);
// 初始化猴子编号
for (i = 0; i < m; i++) {
monkey[i] = i + 1;
}
i = 0; // i表示当前数到第几只猴子
k = 0; // k表示已经踢出圈的猴子数
while (k < m - 1) { // 直到只剩下最后一只猴子
int j = 0; // j表示当前数到第几个数
while (j < n) { // 当前猴子数到第n个数时,踢出圈
if (monkey[i] != 0) { // 如果该猴子还没有被踢出圈
j++;
}
if (j == n) { // 数到了第n个数
printf("%d号猴子被踢出圈\n", monkey[i]);
monkey[i] = 0; // 踢出圈
k++; // 踢出圈的猴子数+1
}
i++;
if (i == m) { // 如果已经数到最后一只猴子,从头开始数
i = 0;
}
}
}
// 输出最后一只猴子的编号
for (i = 0; i < m; i++) {
if (monkey[i] != 0) {
printf("最后一只猴子是%d号猴子\n", monkey[i]);
break;
}
}
return 0;
}
```
程序运行后,会提示输入猴子总数m和每数n个猴子踢出圈,并输出每次被踢出圈的猴子编号和最后一只猴子的编号。例如,当输入m=5,n=3时,程序的输出如下:
```
请输入猴子总数m和每数n个猴子踢出圈:5 3
3号猴子被踢出圈
1号猴子被踢出圈
5号猴子被踢出圈
2号猴子被踢出圈
最后一只猴子是4号猴子
```
阅读全文