#python
#python
Вопрос:
Мне нужно написать программу, которая вычисляет самую дешевую комбинацию большого и малого автобусов для перевозки определенного количества пассажиров, которое задается пользователем. Большой автобус вмещает 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)
Разделение пассажиров на 48 в операторе if является причиной проблемы, поскольку вы можете перевезти менее 48 пассажиров в 1 большом автобусе (например, 30), и это было бы дешевле, чем перевозить их в 3 маленьких автобусах, но я понятия не имею, как я бы определил, что стоимость будет дешевле в этом случае. Я думаю, что решение пролетает прямо над моей головой.
Ответ №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
затем используйте меньший автобус для последних нескольких человек.
Ответ №2:
Заполните как можно больше больших автобусов 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)