我需要编写一个程序,该程序可以计算出由大巴和小巴组成的最便宜的组合来运送一定数量的乘客,这是用户给定的。大型巴士可载48位乘客,租金为200美元,小型巴士可载10位乘客,租金为95美元。我有一个解决方案,可以计算许多大型和小型公交车,但是我不知道如何考虑成本方面的问题。这是我到目前为止的代码:
passengers = int(input("How many passengers? "))
bigBus = 0
smallBus = 0
while passengers > 0:
if passengers / 48 > 1:
passengers -= 48
bigBus += 1
else:
passengers -= 10
smallBus += 1
cost = (bigBus * 200) + (smallBus * 95)
print("Hire", bigBus, "big buses and", smallBus, "small buses.")
print("Cost =", cost)
if语句中将乘客除以48是问题的原因,因为您可以在1辆大巴士(例如30辆)中运送少于48位乘客,并且比在3辆小巴士中运送他们便宜,但是我不知道在那种情况下如何确定成本会更低。我认为解决方案正浮现在我头上。
答案 0 :(得分:1)
您的每位乘客平均费用为200/48
,如果公交车已满,则为95/10
。显然,较大的巴士更经济,因此最好的解决方案是使用更多的大型巴士。
n_large = 0
n_small = 0
n_large += passengers // 48
# people remain unsettled
# [0, 48]
passengers = passengers % 48
但是您还需要计算最后一辆公共汽车的费用,因为它没有很多人:if 200/num_people_left > 95/num_people_left
,然后为最后几个人使用较小的公共汽车。
答案 1 :(得分:0)
填充尽可能多的大型总线passengers // 48
。然后,对于剩余的乘客,您可以基于以下事实做出一个简单的决定:3辆小型巴士的价格超过1辆大型巴士的费用(因此,您不会使用超过2辆小型巴士):
剩余的乘客= passengers % 48
(remaining+9) // 10
。这可以归结为:
remaining = passengers % 48
largeBusses = passengers // 48 + int(remaining > 20)
smallBusses = (remaining+9) // 10 * int(remaining <= 20)