设某银行有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>
#define OVERFLOW -1
#define ERROR 0
#define FALSE 0
#define TRUE 1
#define OK 1
using namespace std;
typedef int Status;
typedef int QElemType;
typedef struct QNode
{
    QElemType data;
    struct QNode *next;
}QNode, *QueuePtr;
typedef struct Queue
{
    QueuePtr front;
    QueuePtr rear;
}Queue;
Status InitQueue(Queue &Q)
{
    Q.front = (QNode *)malloc(sizeof(QNode));
    if(!Q.front) exit(OVERFLOW);
    Q.front->next = NULL;
    Q.rear = Q.front;
    return OK;
}
Status DestroyQueue(Queue &Q)
{
    QNode *p = Q.front, *postp;
    while(p)
    {
        postp = p->next;
        free(p);
        p = postp;
    }
    Q.front = Q.rear = NULL;
    return OK;
}
Status ClearQueue(Queue &Q)
{
    QNode *p = Q.front->next;
    while(p)
    {
        QNode *temp = p;
        p = p->next;
        free(p);
    }
    Q.rear = Q.front;
    Q.rear->next = NULL;
}
Status EmptyQueue(Queue Q)
{
    if(Q.front == Q.rear)
        return TRUE;
    return FALSE;
}
int QueueLength(Queue Q)
{
    int len = 0;
    QNode *temp = Q.front->next;
    while(temp)
    {
        ++len;
        temp = temp->next;
    }
    return len;
}
Status GetHead(Queue Q, QElemType &e)
{
    if(Q.front = Q.rear)
        return ERROR;
    e = Q.front->next->data;
    return OK;
}
Status EnQueue(Queue &Q, QElemType e)
{
    QueuePtr p;
    p = (QNode *)malloc(sizeof(QNode));
    if(!p) exit(OVERFLOW);
    p->data = e; p->next = NULL;
    Q.rear->next = p;
    Q.rear = p;
    return OK;
}
Status DeQueue(Queue &Q, QElemType &e)
{
  if(Q.front == Q.rear)
    return ERROR;
    QueuePtr temp = Q.front->next;
    e = temp->data;
    Q.front->next = temp->next;
    if(Q.rear == temp) Q.rear = Q.front;
    free(temp);
    return OK;
}
int main()
{
    Queue Qa, Qb;
    InitQueue(Qa);
    InitQueue(Qb);
    int n, flag = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; ++i)
    {
        QElemType temp;
        scanf("%d", &temp);
        if(temp % 2 == 1)
        {
            EnQueue(Qa, temp);
        }
        else
        {
         EnQueue(Qb, temp);
        }
    }
    for(int i = 0; i <= n; ++i)
    {
        QElemType temp;
        if(!EmptyQueue(Qa))
        {
            DeQueue(Qa, temp);
            if(flag == 0)
              printf("%d", temp);
              else
               printf(" %d", temp);
               flag = 1;
        }
        if(i % 2 == 1 && !EmptyQueue(Qb))
        {
            DeQueue(Qb, temp);
           if(flag == 0)
              printf("%d", temp);
              else
               printf(" %d", temp);
               flag = 1;
        }
    }

}