josephus问题c++面向对象
时间: 2024-01-05 19:04:30 浏览: 83
C++约瑟夫斯问题
好的,我可以为您提供关于 Josephus 问题的 C++ 面向对象实现。
下面是一个示例代码:
```cpp
#include <iostream>
#include <vector>
class Josephus {
private:
int n, k;
std::vector<int> people;
public:
Josephus(int n_, int k_) : n(n_), k(k_) {
for (int i = 1; i <= n_; ++i) {
people.push_back(i);
}
}
void solve() {
int index = 0;
while (people.size() > 1) {
index = (index + k - 1) % people.size();
std::cout << "Person " << people[index] << " was eliminated." << std::endl;
people.erase(people.begin() + index);
}
std::cout << "The last person standing is " << people[0] << "." << std::endl;
}
};
int main() {
int n, k;
std::cout << "Please enter the number of people (n): ";
std::cin >> n;
std::cout << "Please enter the elimination interval (k): ";
std::cin >> k;
Josephus game(n, k);
game.solve();
return 0;
}
```
该程序首先使用一个 `Josephus` 类来存储人数和间隔,以及一个向量来存储每个人的编号。然后,`solve()` 函数模拟了解决 Josephus 问题的过程。在每个回合中,程序计算出应该被淘汰的人的索引,然后将其从向量中删除。最后,当只剩下一个人时,程序输出它的编号。
在 `main()` 函数中,程序先从用户输入中获取人数和间隔,并创建一个 `Josephus` 对象来解决问题。最后,程序调用 `solve()` 函数以输出结果。
希望这个示例代码对您有所帮助!
阅读全文