一、问题描述:
设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti(1≤i≤n)。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。
二、算法设计
对于给定的n个顾客需要的服务时间,计算最优服务次序。
三、数据输入
第1行是正整数n,表示有n 个顾客。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。
输出样例:
10
56
12
1
99
1000
234
33
55
99
812
输出样例:
第1次服务第3个顾客。
第2次服务第2个顾客。
第3次服务第7个顾客。
第4次服务第8个顾客。
第5次服务第1个顾客。
第6次服务第4个顾客。
第7次服务第9个顾客。
第8次服务第6个顾客。
第9次服务第10个顾客。
第10次服务第5个顾客。
顾客平均等待时间: 532.0
四、具体实现代码
def sj(t):
# 列表存储每一位顾客的等待时间
a = [0 for i in range(len(t))]
# 将顾客等待时间按照时间进行排序
t = sorted(t, key = lambda x:x[0])
# 遍历顾客时间,并对每一位顾客的时间进行累加
for i in range(len(t)):
# 输出每次进行服务的顾客是第几位
print("第{}次服务第{}个顾客。".format(i+1,t[i][1]+1))
for j in range(i,len(t)):
a[j] += t[i][0]
# 返回最后的总时间
return sum(a)
# 输入顾客的数量
n = int(input("请输入顾客的人数:"))
print("请输入每个顾客服务的时间:")
# 输入每一个顾客进入的次序和服务时间
t = [[int(input()),i] for i in range(n)]
# 进行统计总的等待时间
tz = sj(t)
# 输出平均时间
print("顾客平均等待时间:",tz/n)
五、代码运行结果