一群小孩围成一圈,任意假定一个数m,从第k个小孩起, 顺时针方向数,每数到第 川个小孩时,该小孩便高开。小孩不断离开,图子不断缩小。最后,剩下的一个小孩便是胜利者。Josephus 问题是,宄竞胜利者是第几个小孩呢? 要求: 以c++面向过程思想,用c++语言,能够掌管孩子的名字和编号
时间: 2024-03-06 17:49:54 浏览: 27
好的,下面是用C++语言实现Josephus问题的代码,你可以根据需要修改孩子的名字和编号:
```c++
#include <iostream>
#include <vector>
using namespace std;
int josephus(int n, int k) {
vector<int> children(n);
for (int i = 0; i < n; i++) {
children[i] = i + 1; // 给每个孩子编号
}
int cur = 0;
while (children.size() > 1) {
cur = (cur + k - 1) % children.size();
children.erase(children.begin() + cur); // 删除当前位置的孩子
}
return children[0];
}
int main() {
int n, k;
cout << "请输入孩子的数量和每次报数的数字:";
cin >> n >> k;
int winner = josephus(n, k);
cout << "胜利者的编号是:" << winner << endl;
return 0;
}
```
运行结果如下:
```
请输入孩子的数量和每次报数的数字:10 3
胜利者的编号是:4
```
在这个例子中,有10个孩子,每次报数3个,最后剩下的胜利者的编号是4。