c++写一个程序规则是有n 个人依次围成一圈,从第1 个人开始报数,数到第m 个人出列,然后从出列的下一个人开始报数,数到第m 个人又出列,…,如此反复到所有的人全部出列为止。设n 个人的编号分别为1,2,…,n ,打印出列的顺序。
时间: 2024-09-16 11:02:23 浏览: 32
在C++中,我们可以使用循环和数组来模拟这个过程。这里是一个简单的示例程序,描述了如何按照规则打印每个人出列的顺序:
```cpp
#include <iostream>
using namespace std;
int main() {
int n, m; // 人数和报数次数
cout << "请输入人数 n 和报数次数 m:" << endl;
cin >> n >> m;
// 创建一个数组,存储每个人的编号
int* circle = new int[n];
for (int i = 0; i < n; ++i) {
circle[i] = i + 1;
}
while (n > 0) { // 当还有人时,继续循环
int current_pos = 0; // 当前报数的位置
do { // 循环直到有人出列
cout << "当前报数者: " << circle[current_pos] << endl;
current_pos = (current_pos + m - 1) % n; // 更新报数位置,m-1是因为索引是从0开始的
} while (circle[current_pos] != 1); // 报到第一个的人才出列,跳出循环
// 出列的人移除
delete[] circle; // 删除已经出列的元素
n--; // 人数减少
circle = new int[n]; // 重新创建新的数组
for (int i = 0; i < n; ++i) {
circle[i] = i + 1 + current_pos; // 新的起始位置是当前出列位置+1
}
}
return 0;
}
阅读全文