栈与队列专题详解之银行业务队列简单模拟

发布时间:2026/6/14 15:40:17

栈与队列专题详解之银行业务队列简单模拟 题目描述银行业务队列简单模拟设某银行有 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解析根据题意用两个队列模拟银行窗口处理业务输出顺序总是按照 A 先 B 后即 A 窗口先处理最多 2 个顾客B 窗口再处理最多 1 个顾客。#includeiostream #includecstdio #includequeue using namespace std; int first1; void print(int x){ if(first){ first0; printf(%d,x); } else printf( %d,x); } int main(){ queueint p1,p2; int n,x,w; scanf(%d,n); while(n--){ scanf(%d,x); if(x%2) p1.push(x); else p2.push(x); } while(1){ if(p1.empty()||p2.empty()) break; if(!p1.empty()){ wp1.front(); p1.pop(); print(w); } if(!p1.empty()){ wp1.front(); p1.pop(); print(w); } if(!p2.empty()){ wp2.front(); p2.pop(); print(w); } } while(!p1.empty()){ wp1.front(); p1.pop(); print(w); } while(!p2.empty()){ wp2.front(); p2.pop(); print(w); } }还有一种比较特殊的队列称为双端队列在入队或出队操作时的位置可以是队头也可以是队尾经常和 BFS 结合起来解决一些常见的算法问题。

相关新闻