题目:
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; }