7-7 銀行業務佇列簡單模擬(25 分)
阿新 • • 發佈:2019-02-18
設某銀行有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; }