2037:约瑟夫问题
题目
思路
根据题目样例解释就是有从1到8八个数,将这八个数依次放入向量容器vector中,pos代表淘汰位置,从1开始报数,数到5的人淘汰,下一个人从1再开始报数,直至所有人都被淘汰,记得题目要求的是输出出圈人的编号,而不是出圈人的位置下标。
源码
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v;//定义vector容器v
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
v.push_back(i); //push_back( ) 成员函数在向量的末尾插入值,如果有必要会扩展向量的大小
}
int pos=0;//淘汰的位置
while(n--)
{
pos=(pos+m-1)%v.size();//size( ) 函数显示向量的大小。
cout<<v[pos]<<" ";
v.erase(v.begin()+pos);//begin()引用容器的第一个元素
//erase()删除当前向量容器中指定的元素
}
return 0;
}