銀行業務佇列簡單模擬
阿新 • • 發佈:2018-12-11
設某銀行有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的時候就用,否則會導致出錯!!!這個題就如粗!!!