n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。c++
时间: 2024-03-10 13:21:40 浏览: 57
以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, m;
cout << "请输入n和m:";
cin >> n >> m;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
nums[i] = i + 1; // 初始化编号
}
int count = 0; // 记录已出圈的人数
int index = 0; // 记录当前报数的人的下标
while (count < n) {
int len = nums.size();
index = (index + m - 1) % len; // 计算出圈的人的下标
cout << nums[index] << " "; // 输出出圈人的编号
nums.erase(nums.begin() + index); // 从数组中删除出圈的人
count++;
}
return 0;
}
```
代码思路:
1. 输入n和m,初始化一个包含1到n的编号的数组。
2. 使用两个变量count和index分别记录已出圈的人数和当前报数人的下标。
3. 进入循环,每次循环计算出圈的人的下标,输出出圈人的编号,从数组中删除出圈的人,并更新count和index。
4. 直到所有人都出圈,退出循环。
阅读全文