用c++面向对象的思想实现约瑟夫环的全部代码
时间: 2024-03-09 17:50:02 浏览: 104
好的,下面是用 C++ 面向对象的思想实现约瑟夫环的全部代码:
```cpp
#include <iostream>
using namespace std;
class JosephusRing {
public:
JosephusRing(int n, int m);
void start();
private:
int n; // 总人数
int m; // 报数为 m 的人出圈
int* people; // 用动态数组来存储每个人的编号
};
JosephusRing::JosephusRing(int n, int m) {
this->n = n;
this->m = m;
people = new int[n];
for (int i = 0; i < n; i++) {
people[i] = i + 1;
}
}
void JosephusRing::start() {
int pos = 0;
while (n > 1) {
pos = (pos + m - 1) % n;
for (int i = pos; i < n - 1; i++) {
people[i] = people[i + 1]; // 往前移动
}
n--; // 总人数减一
}
cout << "The winner is: " << people[0] << endl;
}
int main() {
int n = 10; // 总人数
int m = 3; // 报数为 m 的人出圈
JosephusRing ring(n, m);
ring.start();
return 0;
}
```
在这个程序中,我们首先定义了一个 `JosephusRing` 类,其中包含了一个构造函数 `JosephusRing(int n, int m)` 和一个成员函数 `start()`。在 `JosephusRing(int n, int m)` 中,我们动态分配了一个大小为 `n` 的数组,并给每个人赋了一个编号。在 `start()` 中,我们模拟了约瑟夫环的过程,并输出最后胜利者的编号。在 `main` 函数中,我们创建了一个 `JosephusRing` 对象,并调用了其 `start()` 函数来开始模拟约瑟夫环的过程。
阅读全文
相关推荐















