题目描述
已知 个人(编号分别为 )围坐在一张圆桌周围。
从编号为 的人开始报数,数到 的那个人出列;
他的下一个人又从 开始报数,数到 的那个人又出列 ……,依此规律重复下去,直到圆桌周围的人全部出列。
由题“出列”二字可知:队列也能做此题
头文件与基础的定义
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int n,m,cnt=1;
cin>>n>>m;
queue<int> q;
全部初始化
for(int i=1;i<=n;i++)
q.push(i);
报数到m就输出,出列,且将cnt初始化
if(cnt==m){
cout<<q.front()<<" ";
q.pop();
cnt=1;
}
否则就出列再入列
q.push(q.front());
cnt++;
q.pop();
最后的全代码
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
int main()
{
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
int n,m,cnt=1;
cin>>n>>m;
queue<int> q;
for(int i=1;i<=n;i++)
q.push(i);
while(!q.empty()){
if(cnt==m){
cout<<q.front()<<" ";
q.pop();
cnt=1;
}else{
q.push(q.front());
cnt++;
q.pop();
}
}
return 0;
}