题目:
Description
n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。
注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰 n−1 名小朋友,而该题是全部出圈。
Input
输入两个整数 n,m。
Output
输出一行n 个整数,按顺序输出每个出圈人的编号。
Sample 1
Inputcopy | Outputcopy |
10 3 | 3 6 9 2 7 1 8 5 10 4 |
Hint
≤1001≤m,n≤100
解题思路:
用STL容器的,queue队列来写:
一个一个的报数,可以想象成一个队列,一个人报完数后,判断他所报的数是不是出局的数,如果是,直接弹出,但若不是,将其移动至队尾。我们使用一个队列之前,需要加上头文件<queue>
代码如下:
#include<bits/stdc++.h>
#include<queue>
using namespace std;
int main()
{int n, m, nowNum = 1;cin >> n >> m;queue<int> q;for(int i = 1; i < n; i++) q.push(i); //初始化队列while(!q.empty()) //在队列不为空时继续{if(nowNum == m){cout << q.front << " "; //打印出局的人的编号q.pop(); //出局nowNum = 1; //初始化现在的数字}else{nowNum++;q.push(q.front()); //排至队尾q.pop();}}cout << endl;return 0;
}