银行业务队列简单模拟

设某银行有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;
 }

 

posted @ 2019-03-30 13:55  有、无敌  阅读(105)  评论(0编辑  收藏  举报