USTC机试——队列循环报数问题
#include<stdio.h>
#include<stdio.h>
#include<queue>
using namespace std;//引入队列头文件注意的格式标准
int main(){
queue<int> q;
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=6;i++){
q.push(i);//将人按编号先放入队列中
}
while(!q.empty()){
//当队列不是空
printf("%d ",q.front());//输出编号为1的元素号码
q.pop();//编号为1的元素出队
if(!q.empty()){//如若还有元素,接着弹出,这一步必不可少,否则会出现数组越界
q.push(q.front());//编号为2的元素号码压入队尾
q.pop();//弹出编号为2的元素
}
//往复循环一直到队列变成空队列
}
}
return 0;
}
代码主要如上述所示,用了queue头文件,极大的省去了自定义的麻烦,思想如下:
n个人从左向右编号1~n,然后从左向右报数“1,2,1,2,1,2...”
数到1的人出队,数到2的人立即站到队列的最右端
继续报数,直到所有人出列