Чтобы решить данную задачу, мы можем воспользоваться перебором возможных комбинаций билетов для того, чтобы минимизировать общую стоимость, сохраняя при этом необходимое количество поездок.
Вот пошаговое объяснение решения задачи:
- Понимание цен:
- Билет на 1 поездку стоит 10 рублей.
- Билет на 10 поездок стоит 235 рублей, что эквивалентно 23.5 рубля за поездку.
- Билет на 60 поездок стоит 1005 рублей, что эквивалентно 16.75 рубля за поездку.
Из этого видно, что самый выгодный вариант — это билет на 60 поездок, затем на 10 поездок и, наконец, на 1 поездку.
Составление уравнения:
Мы должны найти такие целые числа ( x ), ( y ) и ( z ) (где:
- ( x ) — количество билетов на 1 поездку,
- ( y ) — количество билетов на 10 поездок,
- ( z ) — количество билетов на 60 поездок),
чтобы соблюдалось условие:
[
x + 10y + 60z \geq n
]
И минимизировалась стоимость:
[
\text{Стоимость} = 10x + 235y + 1005z
]
Перебор вариантов:
Мы перебираем возможные значения ( z ), ( y ) и ( x ) так, чтобы общая стоимость была минимальной, а общее количество поездок было не менее ( n ).
Вот код на Python, который реализует данное решение:
def calculate_tickets(n):
min_cost = float('inf')
best_combination = (0, 0, 0)
# Перебираем все возможные количества билетов на 60 поездок
for z in range(n // 60 + 2): # +2 для случаев, когда возможно потребуется еще один билет
remaining_trip_after_z = n - 60 * z
if remaining_trip_after_z <= 0:
cost = 1005 * z
if cost < min_cost:
min_cost = cost
best_combination = (0, 0, z)
continue
# Перебираем все возможные количества билетов на 10 поездок
for y in range(remaining_trip_after_z // 10 + 2):
remaining_trip_after_y = remaining_trip_after_z - 10 * y
if remaining_trip_after_y <= 0:
cost = 1005 * z + 235 * y
if cost < min_cost:
min_cost = cost
best_combination = (0, y, z)
continue
x = max(remaining_trip_after_y, 0)
cost = 10 * x + 235 * y + 1005 * z
if cost < min_cost:
min_cost = cost
best_combination = (x, y, z)
return best_combination
# Пример использования
n = int(input("Введите количество поездок: "))
result = calculate_tickets(n)
print(result[0], result[1], result[2])
Объяснение кода:
- Функция
calculate_tickets(n) принимает количество поездок ( n ) и ищет оптимальное количество билетов для каждого типа.
- Внешний цикл проходит по количеству билетов на 60 поездок, считывая наибольшее количество эти билетов, которое может потребоваться.
- Внутренний цикл проходит по количеству билетов на 10 поездок, и затем мы просто вычисляем количество билетов на 1 поездку.
- Мы проверяем каждую комбинацию и обновляем минимальную стоимость и соответствующие количества билетов, если находим более дешевую комбинацию.
- В конце выводятся количество билетов для 1, 10 и 60 поездок.
Таким образом, предоставленный код поможет пассажиру определить, сколько билетов каждого вида нужно купить, чтобы минимизировать затраты.