题目背景
约瑟夫是一个无聊的人!!!
题目描述
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.
输入格式
n m
输出格式
出圈的编号
输入输出样例
输入 #1复制
10 3输出 #1复制
3 6 9 2 7 1 8 5 10 4说明/提示
m, n \le 100m,n≤100
#include<iostream>
#include<queue>
using namespace std;
queue<int>a;
int main()
{
int b, c, d, e = 1, f = 0;
cin >> b >> c;
for (int i = 1; i <= b; i++)
a.push(i);
while (!a.empty())
{
if (e == c)
{
cout << a.front() << " ";
a.pop();
e = 1;
}
else
{
e++;
a.push(a.front());
a.pop();
}
}
}
DALAO用vector做的,学到了
#include<iostream>
#include<vector>
using namespace std;
vector<int>v;
int main()
{
int n, m;
cin >> n >> m;
if (n == 0 && m == 0)
return 0;
for (int i = 1; i <= n; i++)
v.push_back(i);//vector数组的下标从0开始
int vz = 0;
while (v.size()>0)
{
vz = (vz + m-1) % v.size();//找到位置
cout << v[vz]<<" ";
v.erase(v.begin() + vz);//删除指定元素
}
}