约瑟夫问题
题目描述
个人围成一圈,从第一个人开始报数,数到 的人出列,再由下一个人重新从 开始报数,数到 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 名小朋友,而该题是全部出圈。
输入格式
输入两个整数 。
输出格式
输出一行 个整数,按顺序输出每个出圈人的编号。
样例 #1
样例输入 #1
10 3
样例输出 #1
3 6 9 2 7 1 8 5 10 4
提示
思路
首先将 1~n 的数依次加入队列中。
然后进行循环,每轮报数,前 m - 1 个,队首元素放到队尾,然后出队。第 m 个队首元素输出后出队。
重复此过程直到队列为空。
AC代码
#include <iostream>
#include <queue>
#define AUTHOR "HEX9CF"
using namespace std;
int n, m;
queue<int> qu;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
qu.push(i);
}
while (!qu.empty())
{
for (int i = 1; i < m; i++)
{
qu.push(qu.front());
qu.pop();
}
cout << qu.front() << " ";
qu.pop();
}
return 0;
}
标签:输出,出圈,int,题解,样例,P1996,队首,洛谷,报数
From: https://blog.51cto.com/HEX9CF/11951358