文章目录
前言
本次训练内容
- STL库中队列的使用练习。
- 训练解题思维
一、题目
有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,...,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,...,n,打印出列的顺序。
输入格式
n和m。其中n<=100
输出格式
出列的顺序。
样例输入
4 17
样例输出
1 3 4 2
二、解题思路
这道题目是一道普通的出入队列操作的题目。我是使用计数器的模式控制它是否出队列;使用if-else判断,当它符合时,直接弹出队列的头;否则就是不断刷新队列,先队列依次出去,然后紧接着马上入队。实现代码如下:
cpp
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,m;
int sum=0;
cin>>n>>m;
queue<int> q;
for (int i=1;i<=n;i++) {//首次入队
q.push(i);
}
while (!q.empty()) {
sum++;
if (sum%m==0) {//用计数器判断是否输出
cout<<q.front()<<" ";;
q.pop();
}
else {//循环队列,直到所有的元素被输出。
int temp=q.front();
q.pop();
q.push(temp);
}
}
}
要注意首次入队需要从1开始。
总结
今天的题目没有太多难点;只需要理清楚思路,就可以很快的做出来,然后就是代码逻辑问题,今天的输出部分花了点时间思考,这个问题下次应该避免发生。今天的内容没有什么特别的事情发生。今天的内容就到这里吧,因为今天的题目相对普通,没有什么特别的地方了。