使用数组的约瑟夫环c++代码
时间: 2024-11-15 08:11:09 浏览: 44
约瑟夫环(Josephus Problem)是一个经典的算法问题,通常用于展示递归和循环的概念。在这个游戏中,参与者按照一定的步长(比如每n个人跳过一个人),从数组的第一个元素开始删除并计数,直到只剩下一个。以下是C++实现约瑟夫环的一个简单版本:
```cpp
#include <iostream>
using namespace std;
int josephus(int n, int k) {
if (n == 1) return 0; // 如果只有一个人,直接返回0
// 栈用于模拟约瑟夫环的迭代过程
stack<int> ring;
for (int i = 0; i < n; ++i)
ring.push(i);
while (!ring.empty()) {
// 每次弹出k个元素,并移除最后一个
for (int i = 0; i < k - 1 && !ring.empty(); ++i)
ring.pop();
// 输出存活的人的位置
cout << "Survivor: " << ring.top() + 1 << endl;
ring.pop();
}
return 0;
}
int main() {
int participants, skip;
cout << "Enter the number of participants: ";
cin >> participants;
cout << "Enter the step size (skip): ";
cin >> skip;
josephus(participants, skip);
return 0;
}
```
阅读全文