7-18 银行业务队列简单模拟 (25 分)
标签:gif 数据结构 a10 hide ide int 基础题 display print
设某银行有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 }
标签:gif 数据结构 a10 hide ide int 基础题 display print
原文地址:https://www.cnblogs.com/57one/p/11626730.html