Условие: КЕГЭ № 7011 (Уровень: Средний)
• Статья подготовлена командой itpy
• Полный разбор задачи в Notion
Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены коды:
A. Прибавь 2
B. Прибавь 3
С. Умножь на 2
Первая команда увеличивает число на 2 раза, вторая – на 3 раза, третья – в 2 раза. Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом будет являться число 40, при этом траектория вычисления не содержит число 28, а также не содержит подпоследовательность команд BACA. Траектория вычисления программы – это последовательности результатов выполнения всех команд.
Решение через Python и комментарии к нему:
Комментарии к коду решения:
- def F(a, b, s: str): - объявление функции F с тремя параметрами: a и b (целые числа) и s (строка).
- if a >= b or a == 28: - проверка условия. Если a больше или равно b или a равно 28, то выполняется следующий блок кода.
- return a == b and 'BACA' not in s - возвращается результат проверки двух условий: a равно b и строка 'BACA' не содержится в переменной s.
- return F(a+2, b, s+'A') + F(a+3, b, s+'B') + F(a*2, b, s+'C') - возвращается сумма трех рекурсивных вызовов функции F. В каждом вызове значение a увеличивается на 2, 3 или удваивается, а строка s дополняется символом 'A', 'B' или 'C' соответственно.
- print(F(2, 40, '')) - вызов функции F со значениями аргументов 2, 40 и пустой строки. Результат выводится на экран.