约瑟夫问题c++ 用vector做
时间: 2023-12-08 07:37:56 浏览: 78
以下是使用vector解决约瑟夫问题的C++代码示例:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cout << "请输入总人数n和报数m:";
cin >> n >> m;
vector<int> v(n);
for (int i = 0; i < n; i++) {
v[i] = i + 1;
}
int index = 0;
while (v.size() > 1) {
index = (index + m - 1) % v.size();
cout << v[index] << " ";
v.erase(v.begin() + index);
}
cout << endl << "最后留下的人是:" << v[0] << endl;
return 0;
}
```
相关问题
约瑟夫问题c++利用vector
以下是使用vector解决约瑟夫问题的C++代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
int n = 0, i = 0, k = 0, m = 0, p = 0;
cin >> n >> k >> m;
for (i = 0; i < n; i++) {
// 初始化
a.push_back(i + 1);
}
p = k - 2; // 从第n个人开始数,第零位其实是n前面的那个人。数组表示法,还要减一
while (a.size() > 1) { // 循环剔除,直到只剩一个
for (i = 0; i < m; i++) {
if (p + 1 >= a.size()) { // 如果已经到了最后一个数
p = 0;
} else {
p++;
}
}
a.erase(a.begin() + p);
p--; // 重新指向前一个数,再循环m次
}
cout << a[0];
}
```
c++用vector实现约瑟夫环
约瑟夫环是一个经典的数学问题,它的描述如下:N个人围成一圈,从第一个人开始报数,第M个人出圈,然后从出圈的下一个人开始重新报数,再从第M个人出圈,直到所有人都出圈为止。现在,我们来利用vector实现约瑟夫环的求解。
具体实现如下:
```c++
#include <iostream>
#include <vector>
using namespace std;
int josephus(vector<int>& v, int m) {
int i = 0;
while (v.size() > 1) {
i = (i + m - 1) % v.size();
cout << "出圈的人是:" << v[i] << endl;
v.erase(v.begin() + i);
}
return v[0];
}
int main() {
int n, m;
vector<int> v;
cout << "请输入总人数和出圈的数字:" << endl;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
v.push_back(i);
}
int winner = josephus(v, m);
cout << "胜利者是:" << winner << endl;
return 0;
}
```
在这里,我们使用了一个vector来存储所有的人,并且在每次出圈时,利用vector的erase函数来删除出圈的人。最终,当vector中只剩下一个人时,就是胜利者了。