銀行業務隊列簡單模擬


銀行業務隊列簡單模擬

設某銀行有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<iostream>
using namespace std;
struct queue          //創建一個隊列
{
    int data[1000];        //錄入隊列數據
    int top;                 //記錄隊頭,方便取值
    int tail;                  //記錄插入元素的個數
 } ;
 
 void Init(queue *q)           //初始化
 {
     q->tail=-1;
     q->top=-1;
 }
 
 void Push(queue &q,int num)        //隊列輸入
 {
     q.tail++;
     q.data[q.tail]=num;
 }
 
 
 int Pop(queue &q)                     //隊列輸出
 {
     q.top ++;
     return q.data [q.top];              //返回隊列頭元素
 }
 
 int main()
 {
     queue a;                          //創建隊列a,存入奇數
     queue b;                           //創建隊列b,存入偶數
     Init(&a);                        //初始化a隊列
     Init(&b);                         //初始化b隊列
     int ca=0, cb=0;                 //ca,cb用來記錄隊列a,b的元素個數
     int n,c;
     cin>>n;                         //輸入數字的總個數
     for(int i=0;i<n;i++)          
     {
         cin>>c;                         //輸入數據
         if(c%2==0)                       //偶數存入b隊列
         {
             Push(b,c);
             cb++;                            //b隊列個數加1
         }
         else{
             Push(a,c);                          //奇數存入隊列a
             ca++;                                //a隊列個數加1
         }
     }
     
     if(ca>2*cb)                      //隊列的輸出(第一種可能)
     {
         while(ca!=0||cb!=0)
         {
             if(ca!=0)
             {
                 cout<<Pop(a);
                 ca--;
                 if(ca!=0)
                 {
                     cout<<" ";
                     cout<<Pop(a);
                     ca--;
                 }
                 if(ca!=0)
                 {
                     cout<<" ";
                 }
            if(cb!=0)
            {
                cout<<Pop(b);
                cb--;
                cout<<" ";
            }
             }
         }
     }
      
     if(ca<=cb*2)                       //隊列的輸出(第二種可能)
     {
         while(ca!=0||cb!=0)
         {
             if(ca!=0)
             {
                 cout<<Pop(a)<<" ";
                 ca--;
                 cout<<Pop(a)<<" ";
                 ca--;
             }
             if(cb!=0){
                 cout<<Pop(b);
                 cb--;
                 if(cb!=0)
                 {
                     cout<<" ";
                 }
             }
         }
     }
     return 0;
 }

 

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM