python基础之排队接水

本来这题是拿来试试冒泡排序的,结果写了一晚上还没弄好,目前还是不能处理相同的值,以及输出还有问题。
## 排队接水   有n个在一个水龙头前面排队接水,假如每个人接水时间为Ti,请编程找出n个人排队的一种序列,使得n个人的平均等待时间最小。
#输入文件共两行 第一行为n(1<=n<=200);第二行分别表示第1个人到第n个人每人接水时间T1,T2,……Tn,每个数据之间有1个空格
#输出文件有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间
#如 输入:10
# 56 12 1 99 1000 234 33 55 99 812
#输出:3 2 7 8 1 4 9 6 10 5
#291.90
import copy
def sequence_water(lst):
    for i in range(len(lst)-1,1,-1):
        squence_move_max(lst,i)

def squence_move_max(lst,max_index):
    for i in range(max_index):
        if lst[i] >= lst[i+1]:
            lst[i],lst[i+1] = lst[i+1],lst[i]

if __name__ == "__main__":
    person_num = int(input())
    lst = input().split(" ")
    lst = list(map(int,lst))
    old_index = copy.deepcopy(lst)
    if len(lst) == person_num:
        sequence_water(lst)
        for i in range(len(lst)):
            location = old_index.index(lst[i])+1
            print(location,end='')
            print(" ",end='')
        print("\n")
        wait_time = 0
        for index in range(len(lst)-1):
            wait_time += lst[index]*(len(lst)-1-index)
        print(wait_time/len(lst))
    pass
    
还是有问题,明天改改
修改版的来啦
具体思路是将字典的key和value分别存储,找到位置后替换value的值为一个不会出现的数,比如-1,然后就会解决相同值的问题,如下
def sequence_water(lst):
    for i in range(len(lst)-1,1,-1):
        squence_move_max(lst,i)

def squence_move_max(lst,max_index):
    for i in range(max_index):
        if lst[i] >= lst[i+1]:
            lst[i],lst[i+1] = lst[i+1],lst[i]
            
if __name__ == "__main__":
    person_num = int(input())
    lst = input().split(" ")
    lst = list(map(int,lst))
    dict_loc = {}
    key_tem = []
    value_tem = []
    for index in range(len(lst)):
        loc_tem = {'{}'.format(index):lst[index]}
        dict_loc.update(loc_tem)
    for key in dict_loc:
        key_tem.append(key)
        value_tem.append(dict_loc[key])
    if len(lst) == person_num:
        sequence_water(lst)
        for i in range(len(lst)):
            for j in range(len(value_tem)):
                if lst[i] == value_tem[j]:
                    print(int(key_tem[j])+1,end="")
                    print(" ",end="")
                    value_tem[j] = -1
        print("")
        wait_time = 0
        for index in range(len(lst)-1):
            wait_time += lst[index]*(len(lst)-1-index)
        print(wait_time/len(lst))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值