6.银行排队问题
代码:
Code on gitee
【笔记】银行排队问题模拟
使用 C++ 语言,实现了银行排队问题的模拟。主要思路如下:
1. 输入
首先, 从标准输入中读取两个整数,分别代表窗口数 m 和客户数 total。
2. 模拟排队
对于每个客户, 从标准输入中读取两个整数,分别代表该客户到达的时间 tIn 和需要的服务时间 tNeed。然后,模拟客户在银行排队等待服务的过程。
具体来说, 维护一个数组 tNow,其中 tNow[i] 表示第 i 个窗口当前排队的时间。同时, 维护一个队列 tWait,其中存储需要等待的客户需要等待的时间。
对于每个客户, 寻找当前最空闲的窗口,然后判断该客户是否需要等待。
- 如果不需要等待,则该客户可以直接接受服务,服务结束时间为 tIn + tNeed;
- 如果需要等待,则将该客户加入队列 tWait 中,同时更新该窗口的排队时间为上一个客户服务结束的时间加上当前客户的服务时间。
循环执行上述过程,直到处理完所有的客户为止。
3. 计算平均等待时间
处理完所有客户后, 计算客户的平均等待时间。
具体来说, 遍历队列 tWait 中的所有元素,累加它们的等待时间,并除以客户总数。
循环执行上述过程三次,输出每次的客户平均等待时间。
题面
【问题描述】
我们大多都有在银行排队的经历,唉,那坑爹的排队啊!
现在就让我们来算算我们这些客户平均需要等多久吧。
每天刚开始时银行会开m个窗口来为我们total个客户办理业务,
当有客户需要办理业务时,
先选择可以办理业务的窗口,
如果有多个窗口可以办理业务就选择空闲时间最长的窗口,
如果有多个窗口空闲的时间一样长,
则选择序号小的窗口办理业务。
假设我们每个人来到的时间和办理业务所需要的时间
(为了简化问题,采用整数表示时间)都知道了。
现在请你算算我们平均需要等待多久呢?
【输入形式】
有多组测试数据,
每组数据开始有两个正整数
m (<20)和total (<200),
后面有total对整数,
对应客户先后到来的时间以及办理业务所需的时间。
【输出形式】
平均等待的时间,保留两位小数。
【样例输入】
2 6 1 3 4 1 5 3 9 2 13 4 13 3
3 14 0 3 2 2 2 4 5 4 7 2 11 3 12 3 12 4 12 1 13 3 15 4 19 1 22 3 23 2
2 5 0 6 0 5 0 6 7 1 7 2
【样例输出】
0.00
0.29
1.20
【提示】
题目中选择办理的窗口有三个状态,实际上从序号自小到大查找可以最早办理业务的窗口就已经满足上述三个状态了。
【要求】
请用顺序队列或链式队列来完成,否则不得分。
本文通过C++实现银行排队问题的模拟,包括输入窗口数和客户数,模拟排队过程,计算平均等待时间。使用顺序队列或链式队列进行处理,要求输出平均等待时间的两位小数。

1800

被折叠的 条评论
为什么被折叠?



