Вычисление самого дешевого количества больших и маленьких автобусов для перевозки определенного количества пассажиров

#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)