在c++中,设计并实现一个解决约瑟夫环问题的类Joseph当需要解决一个n个人间隔为m的约瑟夫环问题,可以构建一个对象Joseph.obj(n,m),然后调用obj.simulate()输出模拟删除过程。 【输入形式】 •输入为三个正整数n和m和k,空格分隔,分别代表编号长度和间隔长度和起始位置,编号长度n<=50
时间: 2024-02-11 19:07:01 浏览: 135
好的,以下是一个C++的实现,供您参考:
```c++
#include <iostream>
#include <vector>
class Joseph {
public:
Joseph(int n, int m, int k) : n(n), m(m), k(k) {
for (int i = 1; i <= n; i++) {
arr.push_back(i);
}
}
void simulate() {
int idx = k - 1;
while (n > 0) {
idx = (idx + m - 1) % n;
std::cout << arr[idx] << " ";
arr.erase(arr.begin() + idx);
n--;
}
}
private:
int n, m, k;
std::vector<int> arr;
};
int main() {
int n, m, k;
std::cin >> n >> m >> k;
Joseph joseph(n, m, k);
joseph.simulate();
return 0;
}
```
您可以在main函数中输入n、m和k,然后创建Joseph对象并调用simulate函数来进行模拟删除。输出结果将会按照删除顺序依次输出。
阅读全文