Сначала посчитайте тройки цифр с суммой target_sum, затем возведите число вариантов в квадрат. Именно равенство сумм обеих половин даёт ответы 9, 36 и 100.
Подсчёт билетов с заданной суммой первых трёх цифр
Сначала посчитайте тройки цифр с суммой target_sum, затем возведите число вариантов в квадрат. Именно равенство сумм обеих половин даёт ответы 9, 36 и 100.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Счастливый билет — это шестизначный номер, у которого сумма первых трёх цифр совпадает с суммой трёх последних. Реализуйте функцию happy_tickets(), принимающую один параметр:
• target_sum — положительное целое число (1 ≤ target_sum ≤ 27)
Функция должна вернуть количество шестизначных билетов, у которых сумма первых трёх цифр равна target_sum.
Пример 1: Ввод: print(happy_tickets(1)) Вывод: 9
Пример 2: Ввод: print(happy_tickets(2)) Вывод: 36
Пример 3: Ввод: print(happy_tickets(3)) Вывод: 100
Ответ
Сначала посчитайте тройки цифр с суммой target_sum, затем возведите число вариантов в квадрат. Именно равенство сумм обеих половин даёт ответы 9, 36 и 100.
По примерам требуется число счастливых билетов, хотя заключительная формулировка упоминает только первые три цифры. Ведущие нули допустимы: билет — шестисимвольный номер.
def happy_tickets(target_sum):
if type(target_sum) is not int or not 1 <= target_sum <= 27:
raise ValueError('Expected integer from 1 to 27')
triples = sum(
0 <= target_sum - a - b <= 9
for a in range(10)
for b in range(10)
)
return triples * triples
При сумме 1 подходят 001, 010 и 100. Любая из трёх первых половин сочетается с любой из трёх вторых: 3² = 9.