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;
}

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

4377

被折叠的 条评论
为什么被折叠?



