使用c++语言解决问题:n个人围成一圈,编号为1、到n,从第一个人开始顺序1,2,3循环报数,凡是报到3的人退出圈子,找出最后留在圈子中的人原来的序号。要求输出每次退出者的序号(包括最后一个人) 例如初始状态有5个人,退出者的序号为: 3 1 5 2 4
时间: 2024-03-27 17:41:26 浏览: 54
实现这道题可以使用循环链表,将n个人的编号存入循环链表中,每次从头结点开始顺序报数,报到3时删除该节点,直到只剩下一个节点为止。
以下是使用C++语言实现的代码:
```c++
#include <iostream>
#include <list>
using namespace std;
int main() {
int n;
cout << "请输入n值:";
cin >> n;
list<int> circle;
for (int i = 1; i <= n; i++) {
circle.push_back(i);
}
int count = 0;
list<int>::iterator it = circle.begin();
while (circle.size() > 1) {
count++;
if (count == 3) {
cout << *it << " ";
it = circle.erase(it);
count = 0;
} else {
it++;
if (it == circle.end()) {
it = circle.begin();
}
}
}
cout << endl << "最后留下的人的编号是:" << circle.front() << endl;
return 0;
}
```
首先输入n的值,然后将1到n的数依次插入循环链表中。接着,从头结点开始顺序报数,报到3时删除该节点并输出其编号,否则继续往下走。当链表中只剩下一个节点时,输出该节点的编号即为最后留下的人原来的序号。
阅读全文