猴子选大王问题c语言编程代码
时间: 2023-03-12 08:04:40 浏览: 169
猴子选大王问题的C语言编程代码如下:
#include<stdio.h>
void monkey_king(int n)
{
int i,j;
int a[n];
//给每只猴子编号
for(i = 0;i<n;i++)
a[i]=i+1;
i=0;
while(n>1)
{
j=(i+2)%n;
//跳过第3只猴子
for(;j<n-1;j++)
a[j]=a[j+1];
n--;
i=j%n;
}
printf("King is %d\n",a[0]);
}
int main(void)
{
int n;
printf("Input number of monkey:");
scanf("%d",&n);
monkey_king(n);
return 0;
}
相关问题
猴子选大王数组c语言
猴子选大王是一个经典的问题,可以用数组和循环来解决。具体思路如下:
1. 首先,我们需要定义一个数组来表示猴子们的编号,编号从1开始,依次递增。例如,如果有10只猴子,那么数组就是{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}。
2. 接下来,我们需要定义一个变量来表示当前轮到哪只猴子报数。假设第一轮从第一只猴子开始报数,那么初始值为1。
3. 然后,我们需要定义一个变量来表示当前报到几了。初始值为1。
4. 接下来,我们就可以开始模拟猴子选大王的过程了。具体步骤如下:
- 从当前猴子开始,依次报数,直到报到n为止。如果当前猴子的编号为数组的最后一个元素,则从数组的第一个元素开始报数。
- 报到n的猴子出局,从数组中删除。
- 如果数组中只剩下一只猴子,那么这只猴子就是大王。
5. 最后,我们输出大王的编号即可。
下面是一个示例代码,假设有10只猴子,每次报到第3只猴子出局:
```c
#include <stdio.h>
int main() {
int monkeys[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = 3;
int current = 0;
int count = 1;
int size = 10;
while (size > 1) {
if (count == n) {
// 当前猴子出局
for (int i = current; i < size - 1; i++) {
monkeys[i] = monkeys[i + 1];
}
size--;
count = 1; } else {
// 下一只猴子报数
count++;
current++;
if (current == size) {
current = 0;
}
}
}
printf("大王的编号是:%d\n", monkeys[0]);
return 0;
}
```
猴子选大王c语言问题
以下是一个用C语言实现的猴子选大王的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 50
int main() {
int n, m;
int monkey[MAX_N];
int i, j, k;
printf("请输入猴子的数量n和报数的数字m:\n");
scanf("%d%d", &n, &m);
// 初始化猴子状态
for (i = 0; i < n; i++) {
monkey[i] = 1;
}
// 选大王
for (i = 0, j = 0, k = 0; k < n - 1; k++) {
while (monkey[j] == 0) {
j = (j + 1) % n;
}
for (i = 1; i < m; i++) {
do {
j = (j + 1) % n;
} while (monkey[j] == 0);
}
monkey[j] = 0;
}
// 输出当选的猴子
for (i = 0; i < n; i++) {
if (monkey[i] == 1) {
printf("当选的猴子是第%d只\n", i + 1);
break;
}
}
return 0;
}
```