1. 程式人生 > >7-7 銀行業務佇列簡單模擬(25 分)

7-7 銀行業務佇列簡單模擬(25 分)

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

思路:很水的題,雖然作者也很水,但是AC了;好啦,說一下思路,我們只需要判斷奇偶,和考慮如何輸出,而且,在假設奇數足夠的情況下,總是先輸出兩個奇數,在輸出一個偶數,那麼不夠的情況下,例如,此時只有一個奇數和兩個偶數,我們就要輸出這個奇數再把兩個偶數輸出;所以直接把奇偶數存在兩個數組裡就ok了,然後看程式碼的判斷輸出!

#include<iostream>
using namespace std;
int main()
{
    int n,num[1005],x=0,y=0,a[1005],b[1005];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>num[i];
        if(num[i]%2==0)
        {
            b[y]=num[i];
            y++;
        }
        if(num[i]%2!=0)
        {
            a[x]=num[i];
            x++;
        }
    }
    if(x>=0) x=x-1;
    if(y>=0) y=y-1;
    int lenA=x,lenB=y;
    int k = 0;
    while(y>=0||x>=0)
    {
        int t=x;
        if(k)
        {
            cout<<" ";
            k=0;
        }
        if(x>=0)
        {
            cout<<a[lenA-x];
            x--;
            if(x>=0)
            {
               cout<<" "<<a[lenA-x];
               x--;
            }
        }
        if(t>=0&&y>=0)
        {
            cout<<" ";
        }
        if(y>=0)
        {
            cout<<b[lenB-y];
            y--;
        }
        if(x>=0||y>=0)
            k=1;
    }
    return 0;
}