C++编写程序,定义类函数,并在主函数中调用,实现解决约瑟夫环问题
时间: 2024-11-22 19:35:36 浏览: 30
约瑟夫环问题用C++代码实现
在C++中,约瑟夫环问题是经典的问题,可以使用循环和数组结构来解决。首先,我们定义一个类`Josephus`,包含成员变量表示当前轮数以及数组来存储环中的人。然后定义一个类函数`nextPlayer(int current)`,它会计算下一个淘汰的人的位置。
```cpp
#include <iostream>
class Josephus {
private:
int n; // 总人数
int m; // 每隔m个人淘汰一位
std::vector<int> players; // 环中的玩家编号
public:
// 构造函数,初始化玩家列表
Josephus(int numPlayers, int step) : n(numPlayers), m(step) {
for (int i = 0; i < n; ++i) {
players.push_back(i + 1);
}
}
// 计算并返回下一个被淘汰的玩家编号
int nextPlayer() {
int currentIndex = players[0]; // 当前玩家
players.erase(players.begin()); // 移除当前玩家
for (int i = 1; i < m && !players.empty(); ++i) { // 遍历步长直到找到新的淘汰者
currentIndex = (currentIndex + m - 1) % n;
}
return currentIndex;
}
};
int main() {
int numPlayers, step;
std::cout << "请输入总人数和淘汰间隔: ";
std::cin >> numPlayers >> step;
Josephus josephus(numPlayers, step);
std::cout << "按照" << step << "人的间隔,第一个人开始,被淘汰顺序为: ";
while (josephus.players.size() > 1) {
std::cout << josephus.nextPlayer() << " -> ";
}
std::cout << "最后剩下的人是: " << josephus.nextPlayer() << std::endl;
return 0;
}
```
阅读全文