在右侧编辑器中的Begin-End之间补充代码,输出 N(数据由平台提供,已获取,直接使用即可) 只猴子中谁是猴子大王的。具体要求如下: 让 N 只候选猴子围成一圈(最多100只猴子),从某位置起顺序编号为 1 ~ N 号; 从第 1 号开始报数,每轮从 1 报到 3 ,凡报到 3 的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数; 如此不断循环,最后剩下的一只猴子就选为猴王。:#include <iostream> using namespace std; // 函数king:猴子选大王 // 参数:a-猴子数组n-1个猴子分别占据下标为~n-1的位置,n-数组长度 // 返回值:新猴王的下标序号 int king(int a[], int n); int main() { int n, a[1000], i,j,aLast; // 定义变量及数组,n-猴子数量,a-猴子数组 cin >> n; // 输入猴子数量,n>0 // 初始化猴子数组,n 个猴子分别占据 n 个位置 a[0] = 0; // 0号位置没有猴子 for(i = 1;i <= n; i++) a[i] = i; // 选大王啦 /********** Begin *********/ /********** End **********/ cout << i << "号猴子是大王。" << endl; return 0; }
时间: 2023-07-24 14:10:23 浏览: 134
补充后的代码如下:
```c++
#include <iostream>
using namespace std;
// 函数king:猴子选大王
// 参数:a-猴子数组n-1个猴子分别占据下标为~n-1的位置,n-数组长度
// 返回值:新猴王的下标序号
int king(int a[], int n) {
int count = 0, index = 0, left = n;
while (left > 1) {
if (a[index] != 0) {
count++;
if (count == 3) {
a[index] = 0;
left--;
count = 0;
}
}
index++;
if (index == n) {
index = 0;
}
}
for (int i = 0; i < n; i++) {
if (a[i] != 0) {
return i;
}
}
return -1;
}
int main() {
int n, a[100], i, aLast;
// 定义变量及数组,n-猴子数量,a-猴子数组
cin >> n;
// 输入猴子数量,n>0
// 初始化猴子数组,n 个猴子分别占据 n 个位置
a[0] = 0; // 0号位置没有猴子
for (i = 1; i <= n; i++) {
a[i] = i;
}
// 选大王啦
aLast = king(a, n);
cout << aLast << "号猴子是大王。" << endl;
return 0;
}
```
这个程序的核心是 `king` 函数,它模拟了猴子选大王的过程。在这个函数中,我们使用了一个数组 `a` 来表示每只猴子的状态,0 表示已经退出圈子,1 表示还在圈子里。我们使用变量 `count` 来记录当前报数,当 `count` 等于 3 时,将当前猴子的状态置为 0,表示它已经退出圈子,同时更新剩余猴子数 `left` 和 `count`。每轮循环中,我们还需要更新当前报数的猴子的下标 `index`,当 `index` 等于 `n` 时,将其置为 0,表示重新开始报数。当剩余猴子数 `left` 等于 1 时,循环结束,我们遍历整个数组 `a`,找到第一个状态不为 0 的猴子,返回它的下标即可。