约瑟夫问题vector 带详细注释
时间: 2023-09-29 08:10:06 浏览: 62
以下是约瑟夫问题的vector实现,附有详细注释:
```cpp
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
vector<int> v(n); // 定义一个大小为n的vector,初始值全部为0
for (int i = 0; i < n; i++) {
v[i] = i + 1; // 将vector的每个元素初始化为 1,2,3,...,n
}
int k = 0; // k 表示当前删除的人的位置,初始值为0
while (v.size() > 1) { // 当vector的大小大于1时,循环进行删除操作
k = (k + m - 1) % v.size(); // 计算当前要删除的人的位置
cout << v[k] << " "; // 输出当前删除的人的编号
v.erase(v.begin() + k); // 删除vector中的第k个元素
}
cout << endl << "The last one is " << v[0] << endl; // 输出最后留下的人的编号
return 0;
}
```
注释解释如下:
1. `vector<int> v(n)`:定义一个大小为n的vector,初始值全部为0;
2. `for (int i = 0; i < n; i++)`:循环遍历vector的每个元素;
3. `v[i] = i + 1`:将vector的每个元素初始化为 1,2,3,...,n;
4. `k = (k + m - 1) % v.size()`:计算当前要删除的人的位置,`k` 表示当前删除的人的位置,初始值为0;
5. `cout << v[k] << " "`:输出当前删除的人的编号;
6. `v.erase(v.begin() + k)`:删除vector中的第k个元素;
7. `cout << endl << "The last one is " << v[0] << endl`:输出最后留下的人的编号。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)