用C++写出下列问题:有n个人围成一圈(编号为1~n),从第1号开始进行1、2、3报数,凡报3者就退出,下一个人又从1开始报数......直到最后只剩下一个人时为止。请问此人原来的位置是多少号
时间: 2024-03-02 17:53:25 浏览: 30
以下是用C++实现上述问题的代码:
```c++
#include <iostream>
#include <list>
using namespace std;
int main() {
int n, m;
cout << "请输入总人数n:";
cin >> n;
cout << "请输入报数上限m:";
cin >> m;
// 初始化编号为1~n的人
list<int> people;
for (int i = 1; i <= n; i++) {
people.push_back(i);
}
// 报数并淘汰
list<int>::iterator cur = people.begin();
while (people.size() > 1) {
for (int i = 1; i < m; i++) {
cur++;
if (cur == people.end()) {
cur = people.begin();
}
}
cur = people.erase(cur);
if (cur == people.end()) {
cur = people.begin();
}
}
// 输出结果
cout << "最后留下的人的编号为:" << *cur << endl;
return 0;
}
```
运行程序后,将会提示您输入总人数和报数上限,然后输出最后留下的人的编号。