计算最便宜的大小巴士数量,以运送一定数量的乘客

问题描述 投票:2回答:2

我需要编写一个程序来计算最便宜的大小巴士组合来运送一定数量的乘客,这是由用户给出的。一辆大巴载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是导致问题的原因,因为您可以在一辆大巴士(例如30辆)中运送少于48名乘客,并且比在3辆小巴士中运送它们便宜,但我有我不知道如何确定在这种情况下更便宜的成本。我认为解决方案正在飞越我的脑海。

python
2个回答
0
投票

填充尽可能多的大型公共汽车passengers // 48。然后对于剩下的乘客,你有一个简单的决定,基于3辆小型公共汽车花费超过1辆大巴的事实(所以你不会使用两辆以上的小型公共汽车):

乘客剩余= passengers % 48

  • 在0到20之间:使用0,1或2个小型总线(remaining+9) // 10
  • 超过20:使用一辆额外的大巴士

这可归结为:

remaining   = passengers % 48
largeBusses = passengers // 48 + int(remaining > 20)
smallBusses = (remaining+9) // 10 * int(remaining <= 20)

1
投票

如果公共汽车已满,您的每位乘客的平均成本是200/4895/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然后使用较小的公共汽车为最后几个人。

© www.soinside.com 2019 - 2024. All rights reserved.