n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1开始报数,数到 m的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
备注:1≤m,n≤100
输入格式:
输入两个整数 n,m。
输出格式:
输出一行 n个整数,按顺序输出每个出圈人的编号。
输入样例:
在这里给出一组输入。例如:
10 3
输出样例:
在这里给出相应的输出。例如:
3 6 9 2 7 1 8 5 10 4
//这里使用STL的vector;
1、这里主要使用vector序列封装的erase,size函数;
2、约瑟夫问题的算法,先建议自己想,本题也是本人自己想的一个解法;
具体代码:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
vector <int> v(n);
for(int i=0;i<n;i++){
v[i]=1+i;
}
int j=0;
j=(j+m-1)%(v.size());//在PTA上格式要求,因此单独这样写一段
cout<<v[j];
v.erase(j+v.begin());
while(!v.empty())
{
j=(j+m-1)%(v.size());//本质就是基于当前人数v.size()取余数字m
cout<<" "<<v[j];
v.erase(j+v.begin());
}
}