7-2 银行业务队列简单模拟 (PTA - 数据结构)
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
输入格式:
输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。
输出格式:
按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。
输入样例:
8 2 1 3 9 4 11 13 15
输出样例:
1 3 2 9 11 4 13 15
思路分析:
这道题主要就是队列的应用,先输入N个人,奇数到队列1,偶数到队列2,全部写入完成之后,再进行一下输出。我们不难发现第三个往往是偶数,即队列2出队,其余都是队列1出队。
其余情况是其中一个队列提前没人,加入if判断即可。难度不大,刷经验的题,此题我在写的时候直接一维数组queue搭配bottom和flag(top)变量解决,不难处理。
代码:
#include <stdio.h>
int main(){
int N;
scanf("%d",&N);
int queue1[1000];
int flag1 = 0;
int bottom1 = 0;
int bottom2 = 0;
int flag2 = 0;
int queue2[1000];
int num;
for(int i = 0;i < N;i++){
scanf("%d",&num);
if(num % 2 != 0){
queue1[flag1] = num;
flag1++;
}
else{
queue2[flag2] = num;
flag2++;
}
}
for(int i = 1;i <= N;i++){
if(bottom1 == flag1){
if(i == N)
printf("%d",queue2[bottom2]);
else
printf("%d ",queue2[bottom2]);
bottom2++;
}
else if(bottom2 == flag2){
if(i == N)
printf("%d",queue1[bottom1]);
else
printf("%d ",queue1[bottom1]);
bottom1++;
}
else if(i % 3 != 0){
if(i == N)
printf("%d",queue1[bottom1]);
else
printf("%d ",queue1[bottom1]);
bottom1++;
}
else{
if(i == N)
printf("%d",queue2[bottom2]);
else
printf("%d ",queue2[bottom2]);
bottom2++;
}
}
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)