USTC机试——队列循环报数问题

本文介绍了一个使用C++标准库中的队列(queue)来模拟约瑟夫问题的程序实现。通过不断让编号为1的人出队并让编号为2的人移到队列末尾的方式,实现了n个人围成一圈报数的游戏过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值