№ 7011 (Уровень: Средний)
Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены коды:
A. Прибавь 2
B. Прибавь 3
С. Умножь на 2
Первая команда увеличивает число на 2 раза, вторая – на 3 раза, третья – в 2 раза. Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 2 результатом будет являться число 40, при этом траектория вычисления не содержит число 28,
а также не содержит подпоследовательность команд BACA. Траектория вычисления программы – это последовательности результатов выполнения всех команд.
Комментарии к коду решения:
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 и пустой строки. Результат выводится на экран.
def F(a, b, s: str):
if a >= b or a == 28:
return a == b and 'BACA' not in s
return F(a+2, b, s+'A') + F(a+3, b, s+'B') + F(a*2, b, s+'C')
print(F(2, 40, ''))
**Присоединяйтесь и готовьтесь с нами: t.me/informatika_kege_itpy**