PTA数据结构与算法题目集(中文) 7-18

PTA数据结构与算法题目集(中文)  7-18

7-18 银行业务队列简单模拟 (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
题目分析:一道简单的利用队列的题 没什么需要注意的点 用这些基础题练手后 要学会使用STL 自己手写堆栈 麻烦不说 还可能出错
 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #define Size 1000
 4 int Queue[Size];
 5 int Rear = 0;
 6 int Front = 1;
 7 int size;
 8 int Succ(int num)
 9 {
10     if (num == Size)
11         return 0;
12     else
13         return num;
14 }
15 void EnQueue(int num)
16 {
17     Rear = Succ(Rear + 1);
18     Queue[Rear] = num;
19     size++;
20 }
21 int DeQueue()
22 {
23     int num = Queue[Front];
24     Front = Succ(Front + 1);
25     size--;
26     return num;
27 }
28 int IsEmpty()
29 {
30     return size == 0;
31 }
32 
33 int main()
34 {
35     int sum,sum1;
36     int N=0, M=0;
37     int A[1000] = { 0 };
38     int B[1000] = { 0 };
39     scanf("%d", &sum);
40     sum1 = sum;
41     while (sum--)
42     {
43         int num;
44         scanf("%d", &num);
45         if (num % 2)
46             A[N++] = num;
47         else
48             B[M++] = num;
49     }
50     int i = 0, j = 0;
51     while (i<N||j<M)
52     {
53         for(int k=2;k>0&&i<N;k--)
54         {
55             EnQueue(A[i]);
56             i++;
57         }
58         if (j<M)
59         {
60             EnQueue(B[j]);
61             j++;
62         }
63     }
64     int Flag = 0;
65     while (!IsEmpty())
66     {
67         if (Flag == sum1 - 1)
68             break;
69         printf("%d ", DeQueue());
70         Flag++;
71     }
72     printf("%d", DeQueue());
73     return 0;
74 }
View Code

猜你喜欢

转载自www.cnblogs.com/57one/p/11626730.html