最优服务次序问题

一、问题描述:

        设有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)

五、代码运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值