Помогите с задачей в Python
Билет на одну поездку на автобусе стоит 30 рублей, билет на 10 поездок стоит 235 рублей, билет на 60 поездок стоит 1005 рублей. Пассажир планирует совершить n поездок.
Определите, сколько билетов каждого вида он должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n , а общая стоимость приобретенных билетов минимальна. Код проходит 40 тестов, но у меня не верно
a = n % 60 % 10
b = n % 60 // 10
c = n // 60
if b >= 4:
print(0, 0, c + 1)
if a >= 8 and b <= 3:
print(0, b + 1, c)
if a <= 7 and b <= 3:
print(a, b, c)
Ответы (2 шт):
Для n = 40 ваша программа предлагает купить один билет на 60 поездок за 1005 рублей. Но четыре билета по 10 поездок обойдутся дешевле, в 940 рублей.
def min_ticket_cost(n):
single_trip_cost = 30
ten_trip_cost = 235
sixty_trip_cost = 1005
total_cost = 0
if n >= 60:
total_cost += (n // 60) * sixty_trip_cost
n %= 60
if n >= 10:
total_cost += (n // 10) * ten_trip_cost
n %= 10
total_cost += n * single_trip_cost
return total_cost
n = int(input("Введите количество поездок: "))
cost = min_ticket_cost(n)
print(f"Минимальная стоимость: {cost} рублей")
Вероятнее всего похоже на домашнее задание. Убедитесь что вы не забегаете по материалу вперёд учителя) А то сейчас насоветуют вам сразу
def min_ticket_cost(n):
return (n // 60) * 1005 + (n % 60 // 10) * 235 + (n % 10) * 30
Ну или ещё лучше
print(f"Минимальная стоимость: {(lambda n: (n // 60) * 1005 + (n % 60 // 10) * 235 + (n % 10) * 30)(int(input('Введите количество поездок: ')))} рублей")
import unittest
def min_ticket_cost(n):
return (n // 60) * 1005 + (n % 60 // 10) * 235 + (n % 10) * 30
class TestMinTicketCost(unittest.TestCase):
def setUp(self):
self.expected_costs = expected_costs = [
0, # 0 trips
30, # 1 trip
60, # 2 trips
90, # 3 trips
120, # 4 trips
150, # 5 trips
180, # 6 trips
210, # 7 trips
240, # 8 trips
270, # 9 trips
235, # 10 trips
265, # 11 trips
295, # 12 trips
325, # 13 trips
355, # 14 trips
385, # 15 trips
415, # 16 trips
445, # 17 trips
475, # 18 trips
505, # 19 trips
470, # 20 trips
500, # 21 trips
530, # 22 trips
560, # 23 trips
590, # 24 trips
620, # 25 trips
650, # 26 trips
680, # 27 trips
710, # 28 trips
740, # 29 trips
705, # 30 trips
735, # 31 trips
765, # 32 trips
795, # 33 trips
825, # 34 trips
855, # 35 trips
885, # 36 trips
915, # 37 trips
945, # 38 trips
975, # 39 trips
940, # 40 trips
970, # 41 trips
1000, # 42 trips
1030, # 43 trips
1060, # 44 trips
1090, # 45 trips
1120, # 46 trips
1150, # 47 trips
1180, # 48 trips
1210, # 49 trips
1175, # 50 trips (235 * 5)
1205, # 51 trips (235 * 5 + 30)
1235, # 52 trips (235 * 5 + 30 * 2)
1265, # 53 trips (235 * 5 + 30 * 3)
1295, # 54 trips (235 * 5 + 30 * 4)
1325, # 55 trips (235 * 5 + 30 * 5)
1355, # 56 trips (235 * 5 + 30 * 6)
1385, # 57 trips (235 * 5 + 30 * 7)
1415, # 58 trips (235 * 5 + 30 * 8)
1445, # 59 trips (235 * 5 + 30 * 9)
1005, # 60 trips (one 60-trip ticket)
1035, # 61 trips (one 60-trip ticket + 1 single)
1065, # 62 trips (one 60-trip ticket + 2 singles)
1095, # 63 trips (one 60-trip ticket + 3 singles)
1125, # 64 trips (one 60-trip ticket + 4 singles)
1155, # 65 trips (one 60-trip ticket + 5 singles)
1185, # 66 trips (one 60-trip ticket + 6 singles)
1215, # 67 trips (one 60-trip ticket + 7 singles)
1245, # 68 trips (one 60-trip ticket + 8 singles)
1275, # 69 trips (one 60-trip ticket + 9 singles)
1240, # 70 trips (one 60-trip ticket + one 10-trip ticket)
1270, # 71 trips (one 60-trip ticket + one 10-trip ticket + 1 single)
]
def test_min_ticket_cost(self):
for n in range(72):
print(n)
self.assertEqual(min_ticket_cost(n), self.expected_costs[n])
print(120)
self.assertEqual(min_ticket_cost(120),2*1005)
if __name__ == '__main__':
unittest.main()