约瑟夫问题c++代码数组
时间: 2024-03-15 19:40:50 浏览: 110
一个简单的约瑟夫环问题在C++中的实现
约瑟夫问题是一个经典的数学问题,描述如下:有n个人围成一圈,从第k个人开始报数,报到m的人出列,然后从下一个人开始重新报数,直到所有人都出列。现在给定n、k和m的值,请编写C++代码实现约瑟夫问题。
以下是一种可能的实现方式:
```cpp
#include <iostream>
#include <vector>
int josephus(int n, int k, int m) {
std::vector<int> people(n);
for (int i = 0; i < n; i++) {
people[i] = i + 1;
}
int index = k - 1;
while (people.size() > 1) {
index = (index + m - 1) % people.size();
people.erase(people.begin() + index);
}
return people[0];
}
int main() {
int n, k, m;
std::cout << "请输入总人数n:";
std::cin >> n;
std::cout << "请输入起始位置k:";
std::cin >> k;
std::cout << "请输入报数间隔m:";
std::cin >> m;
int winner = josephus(n, k, m);
std::cout << "最后剩下的人是:" << winner << std::endl;
return 0;
}
```
这段代码中,我们使用了一个vector来表示所有的人,并按顺序给每个人编号。然后,我们从起始位置开始,每次报数到m的人出列,直到只剩下一个人为止。最后,输出剩下的那个人的编号。
阅读全文