设某银行有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++;
        }
    }
}

Logo

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

更多推荐