1. 程式人生 > >資料結構-銀行業務佇列簡單模擬

資料結構-銀行業務佇列簡單模擬

7-5 銀行業務佇列簡單模擬 (25 分)

設某銀行有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<stdio.h>
#include<string.h>
int q1[1004],q2[1004];
int main()
{
	int n;
	scanf("%d",&n);
	int head1 = 0,head2 = 0;
	int end1 = 0,end2 = 0;
	for(int i = 0; i < n; i ++)
	{
		int x;
		scanf("%d",&x);
		if(x&1)
			q1[end1++]  = x;
		else
			q2[end2++] = x;
	}
	int s = 0;
	while(1)
	{
		if(head1==end1&&head2==end2)
			break;
		int flag = 2;
		while(flag--)
		{
			if(head1!=end1)
			{
				if(s)
					printf(" %d",q1[head1]);
				else
				{
					printf("%d",q1[head1]);
					s = 1;
				}
				head1++;
			}
			else
				break;
		}
	
		if(head2!=end2)
		{
			if(s)
				printf(" %d",q2[head2]);
			else
			{
				printf("%d",q2[head2]);
				s = 1;
			}
			head2++;
		}
	}
}