用C++中的数组来实现
时间: 2024-03-26 18:34:28 浏览: 50
好的,以下是使用 C++ 数组实现约瑟夫环问题的示例代码:
```
#include <iostream>
using namespace std;
int main() {
int n, m;
cout << "请输入总人数 n 和报数上限值 m:" << endl;
cin >> n >> m;
int a[n] = {0}; // 初始化数组,所有元素都为 0
int cnt = 0, i = -1, j = 0; // cnt 记录已出列人数,i 记录上一个出列人的下标,j 记录报数的人的下标
while (cnt < n) { // 当所有人都未出列时,继续循环
for (int k = 1; k <= m; k++) { // 报数
i++;
if (i == n) { // i 超过数组下标范围,从头开始
i = 0;
}
if (a[i] == 1) { // 如果已出列,继续报数
k--;
}
}
j = i; // 记录出列人的下标
a[j] = 1; // 标记出列
cnt++; // 记录已出列人数
cout << "第 " << cnt << " 个出列的人的编号是:" << j + 1 << endl;
}
return 0;
}
```
在该示例代码中,我们使用了一个长度为 n 的数组来记录每个人是否已出列。初始化数组时,所有元素都为 0,表示所有人都未出列。每次报数时,我们通过循环遍历数组来查找下一个报数的人,如果该人已出列,则跳过这个人,继续查找下一个人。找到第 m 个人后,我们将该人标记为已出列,并记录该人的下标。当所有人都已出列时,循环结束。
阅读全文