1. 程式人生 > >銀行業務佇列簡單模擬

銀行業務佇列簡單模擬

設某銀行有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

答案:

#include <bits/stdc++.h>

int j[1000];
int o[1000];

int main()
{
    memset(j,0,sizeof(j));
    memset(o,0,sizeof(o));
    int n,m;
    int j1=0,o1=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&m);
        if(m%2==0)
        {
            o[o1]=m;
            o1++;
        }
        else if(m%2==1)
        {
            j[j1]=m;
            j1++;
        }
    }
    int flag=1,couj=0,couo=0;
    while(j1>0||o1>0)
    {
        if(flag==1&&j1>0)
        {
            printf("%d",j[couj]);
            couj++;
            j1--;
            flag=0;
            if(j1>0)
            {
                printf(" %d",j[couj]);
                couj++;
                j1--;
            }
        }
        else if(flag==0&&j1>0)//這裡必須是else if,否則會出錯;
        {
            printf(" %d",j[couj]);
            couj++;
            j1--;
            flag=0;
            if(j1>0)
            {
                printf(" %d",j[couj]);
                couj++;
                j1--;
            }
        }
        if(flag==1&&o1>0)
        {
            printf("%d",o[couo]);
            couo++;
            o1--;
            flag=0;
        }
        else if(flag==0&&o1>0)
        {
            printf(" %d",o[couo]);
            couo++;
            o1--;
        }
    }
    return 0;
}

解讀題意:

根據題意可以得出,輸出序列是按照兩奇一偶的方式進行輸出。

注意: 已經懂了輸出的規律,但是還是沒有做出來,這個是為什麼呢? (1)不知道如何控制格式輸出,通過此題,可以看出,可以通過一個變數來控制採用“%d空格%d”還是“空格%d空格%d”還是“%d”等。 (2)可以用一個從0開始的變數來控制陣列的輸出,用真實長度減減來看還有多少資料剩餘。 (3)不要忘記考慮如果僅有偶數或者僅有奇數的話應該怎麼處理。 (4)對於if和else if,該用else if的時候就用,否則會導致出錯!!!這個題就如粗!!!