int king(int a[], int n); int main() { int n, a[1000], i; cin >> n; // 输入猴子数量,n>0 // 初始化猴子数组,n 个猴子分别占据 n 个位置 a[0] = 0
时间: 2024-02-20 22:58:47 浏览: 76
下面是完整的代码实现:
```cpp
#include <iostream>
using namespace std;
// 返回最后剩下的猴子的编号
int king(int a[], int n) {
int i, j, s = n;
for (i = 0; s > 1; i++) {
// i 是当前报数的猴子编号
if (a[i % n] != -1) { // 如果这只猴子还没有出局
if (i % 3 == 2) { // 如果报数是 3 的倍数
a[i % n] = -1; // 标记这只猴子已经出局
s--; // 猴子数量减 1
}
}
}
// 找到最后剩下的猴子的编号
for (j = 0; j < n; j++) {
if (a[j] != -1) {
return j;
}
}
return -1;
}
int main() {
int n, a[1000], i;
cin >> n; // 输入猴子数量,n>0
// 初始化猴子数组,n 个猴子分别占据 n 个位置
a[0] = 0;
for (i = 1; i < n; i++) {
a[i] = (a[i - 1] + 1) % 3;
}
// 输出最后剩下的猴子的编号
cout << king(a, n) + 1 << endl;
return 0;
}
```
其中,`a` 数组记录每只猴子在报数时应该说出的数字,如果已经出局则标记为 `-1`。`king` 函数模拟了猴子选大王的过程,每轮循环找到还没有出局的猴子,如果这只猴子报数是 3 的倍数则出局,直到只剩下一只猴子为止。最后在 `main` 函数中输出最后剩下的猴子的编号即可。
阅读全文