PTA 7-18 银行业务队列简单模拟 (25分)

    技术2022-08-14  67

    题目出处 设某银行有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

    思考:此题主要难点在于函数参数的设置和输出格式控制。 在函数参数设置上,我将出队函数的类型设为quene,而把出队元素top设为全局变量,若出队函数传递的参数为top,那么每次出队后quene都不会改变(quene为形参)。 代码

    #include <stdio.h> #include<string.h> #include <stdlib.h> typedef struct Quene quene; struct Quene { int node[1001]; int size; int front; int rear; }; quene A,B; void gen() { //quene A,B; int sum; int num; scanf("%d",&sum); A.front=0; A.rear=0; A.size=0; B.front=0; B.rear=0; B.size=0; int i; for(i=0;i<sum;i++) { scanf("%d",&num); if(num%2==0) { B.node[B.rear]=num; B.rear++; B.size++; } else { A.node[A.rear]=num; A.rear++; A.size++; } } } int top_a1=1,top_a2=1,top_b=1; int top; quene Pop(quene q) { //int top=-1; if(q.size>0) { top=q.node[q.front]; q.size--; q.front++; } else { top=-1; } return q; } int main() { int a1=1,a2=1,b=1; int tag=0; gen(); while(a1>0||a2>0||b>0) { A=Pop(A); a1=top; if(top>0) { if(tag) { printf(" "); } printf("%d",top); tag=1; } A=Pop(A); a2=top; if(top>0) { if(tag) { printf(" "); } printf("%d",top); tag=1; } B=Pop(B); b=top; if(top>0) { if(tag) { printf(" "); } printf("%d",top); tag=1; } } return 0; }
    Processed: 0.015, SQL: 9