当前位置:   article > 正文

【python】排队接水问题(贪心)_python专用)排队接水 描述 有 n 个人在一个水龙头前排队接水,假如每个人接水的时

python专用)排队接水 描述 有 n 个人在一个水龙头前排队接水,假如每个人接水的时

题目

【题目描述】

有n名人员在一个水龙头前排队等候接水,每个人接水所需的时间是Ti。你的任务是通过编程找出一种排队的顺序,以使得所有人的平均等待时间最为缩短。

【输入说明】
输入包括两行内容。第一行是一个数n(1 ≤ n ≤ 1000),表示排队的人数。第二行包含n个数,分别是T1,T2,…,Tn,用空格隔开,代表每个人接水所需的时间。

【输出说明】
输出也包括两行。第一行是排队顺序的一种排列,由数字1至n组成。第二行显示在这种排列下,所有人的平均等待时间,结果需要保留到小数点后两位。

代码 

  1. """
  2. [输入格式]
  3. 输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。
  4. [输入格式]
  5. 输出文件有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
  6. 思路:
  7. 贪心算法
  8. 为了最小化所有人的平均等待时间,我们应该让接水时间较短的人先接水。这样,接水时间较长的人在等待时,前面的人可以更快地完成接水,从而减少总的等待时间。
  9. 我们可以按照每个人的接水时间将他们排序,然后计算每个人的等待时间,最后得到所有人的平均等待时间。
  10. """
  11. # code:
  12. def minimize_average_wait_time(n, times):
  13. # 创建一个列表来存储人和他们的接水时间
  14. people_times = list(enumerate(times, start=1))
  15. # 按接水时间对人进行排序
  16. people_times.sort(key=lambda x: x[1])
  17. # 初始化总等待时间和结果列表
  18. total_wait_time = 0
  19. result_order = []
  20. # 计算每个人的等待时间
  21. for i, (person, time) in enumerate(people_times):
  22. # 之前所有人的接水时间之和就是当前人的等待时间
  23. wait_time = sum(time for _, time in people_times[:i])
  24. total_wait_time += wait_time
  25. result_order.append(str(person))
  26. # 计算平均等待时间
  27. average_wait_time = total_wait_time / n
  28. return ' '.join(result_order), average_wait_time
  29. def main():
  30. # 输入数据
  31. n = int(input().strip())
  32. times = list(map(int, input().strip().split()))
  33. # 获取结果并打印
  34. order, avg_wait_time = minimize_average_wait_time(n, times)
  35. print(order)
  36. print("%.2f" % avg_wait_time)
  37. if __name__ == '__main__':
  38. main()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/456665
推荐阅读
相关标签
  

闽ICP备14008679号