設某銀行有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 1using 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; } }}