约瑟夫环c++简单的代码实现
时间: 2024-06-15 07:07:06 浏览: 163
当然,下面是一个简单的C++代码实现约瑟夫环的例子:
```cpp
#include <iostream>
#include <list>
using namespace std;
int josephus(int n, int k) {
list<int> circle;
for (int i = 1; i <= n; i++) {
circle.push_back(i);
}
auto it = circle.begin();
while (circle.size() > 1) {
for (int i = 1; i < k; i++) {
it++;
if (it == circle.end()) {
it = circle.begin();
}
}
it = circle.erase(it);
if (it == circle.end()) {
it = circle.begin();
}
}
return circle.front();
}
int main() {
int n, k;
cout << "请输入总人数n:";
cin >> n;
cout << "请输入报数k:";
cin >> k;
int survivor = josephus(n, k);
cout << "最后幸存者的编号是:" << survivor << endl;
return 0;
}
```
这段代码中,我们使用了一个循环链表来模拟约瑟夫环。首先,我们将所有人的编号依次加入到循环链表中。然后,我们使用一个迭代器指向当前报数的人,并在每次报数后将该人从链表中删除。最后,当链表中只剩下一个人时,该人即为最后幸存者。
阅读全文