Помогите с задачей в 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 шт):

Автор решения: Stanislav Volodarskiy

Для n = 40 ваша программа предлагает купить один билет на 60 поездок за 1005 рублей. Но четыре билета по 10 поездок обойдутся дешевле, в 940 рублей.

→ Ссылка
Автор решения: Lith
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()
→ Ссылка