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的人立即站到队列的最右端

           继续报数,直到所有人出列


全部评论

相关推荐

10-28 15:45
门头沟学院 C++
西南山:海康威视之前不是大规模裁员吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务