假设银行有k个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。\n\n本题要求输
时间: 2023-03-19 14:28:06 浏览: 140
入n个顾客的到达时间,以及每个顾客需要处理的时间,计算所有顾客处理完毕的时间。
算法思路:
1. 创建一个长度为k的数组,表示每个窗口的空闲时间,初始值为。
2. 创建一个队列,表示当前排队的顾客。
3. 遍历每个顾客,将其加入队列中。
4. 当队列不为空时,取出队首顾客,找到空闲时间最早的窗口,将其分配给该顾客,更新该窗口的空闲时间。
5. 如果队列中还有顾客,重复步骤4,直到队列为空。
6. 返回最后一个顾客处理完毕的时间。
Python代码实现:
def bank_service(k, n, arrive_time, process_time):
# 创建一个长度为k的数组,表示每个窗口的空闲时间,初始值为
windows = [] * k
# 创建一个队列,表示当前排队的顾客
queue = []
# 遍历每个顾客,将其加入队列中
for i in range(n):
queue.append((arrive_time[i], process_time[i]))
# 当队列不为空时,取出队首顾客,找到空闲时间最早的窗口,将其分配给该顾客,更新该窗口的空闲时间
cur_time =
while queue:
# 找到空闲时间最早的窗口
idx = windows.index(min(windows))
# 取出队首顾客
arrive, process = queue.pop()
# 计算顾客开始处理事务的时间
start_time = max(arrive, windows[idx])
# 更新该窗口的空闲时间
windows[idx] = start_time + process
# 更新当前时间
cur_time = max(cur_time, windows[idx])
# 返回最后一个顾客处理完毕的时间
return cur_time
# 测试
k = 3
n = 5
arrive_time = [1, 2, 6, 8, 9]
process_time = [3, 6, 4, 5, 2]
print(bank_service(k, n, arrive_time, process_time)) # 输出:15
阅读全文