PTA 银行业务队列简单模拟

该问题是一个编程挑战,涉及队列数据结构的使用。给定两个处理速度不同的银行窗口A和B,以及一组顾客编号,需要按照业务完成顺序输出编号。代码中创建了两个队列,分别处理A和B窗口的顾客,优先输出A窗口完成的业务。

PTA 银行业务队列简单模拟

题目描述:

  设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。

输入格式:

  输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。
  在进行数据读入时就按照题干要求依照顾客编号的奇偶进行队列划分,分别进入对应的业务窗口所对应的队列。然后让两个业务窗口同时分别进行处理各自对应的队列,需要格外注意的是不同窗口同时处理完2个顾客时,A窗口顾客优先输出

输出格式:

  按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。

样例:
输入样例:
8 2 1 3 9 4 11 13 15
输出样例:
1 3 2 9 11 4 13 15
思路:

  该题目是简单的队列模拟问题,题目中已经告知不考虑顾客先后到达的时间间隔,故无须考虑顾客到达的时间间隔对银行窗口的业务处理的影响。在具体实现时,因为题中含有两个业务窗口,故使用两个队列进行处理,两个队列分别对应两个窗口的排队人数

代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>

using namespace std;

queue<int>numa;
queue<int>numb;
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0; i<n; i++){
		int a;
		cin >> a;
		if( a % 2 )numa.push(a);
		else numb.push(a);
	}
	int cou = 1;
	while( !numa.empty() && !numb.empty() ){
		if( cou != 1 ) cout<<" ";
		cout << numa.front();
		numa.pop();
		if( cou%2 == 0 ){
			if( cou != 1 )cout<<" ";
			cout << numb.front();
			numb.pop();
		}
		cou++;
	}
	if( numa.empty() )
		while( !numb.empty() ){
			if( cou != 1 )cout << " ";
			cout << numb.front();
			numb.pop();
			cou++;
		}
	else
		while( !numa.empty() ){
			if( cou != 1 )cout << " ";
			cout << numa.front();
			numa.pop();
			cou++;
		}
		return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值