Разбор 23.PNG

№ 7011 (Уровень: Средний)

Исполнитель Калькулятор преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены коды:

A. Прибавь 2

B. Прибавь 3

С. Умножь на 2

Первая команда увеличивает число на 2 раза, вторая – на 3 раза, третья – в 2 раза. Программа для исполнителя – это последовательность команд.

Сколько существует программ, для которых при исходном числе 2 результатом будет являться число 40, при этом траектория вычисления не содержит число 28,

а также не содержит подпоследовательность команд BACA. Траектория вычисления программы – это последовательности результатов выполнения всех команд.

Untitled

Комментарии к коду решения:

  1. def F(a, b, s: str): - объявление функции F с тремя параметрами: a и b (целые числа) и s (строка).
  2. if a >= b or a == 28: - проверка условия. Если a больше или равно b или a равно 28, то выполняется следующий блок кода.
  3. return a == b and 'BACA' not in s - возвращается результат проверки двух условий: a равно b и строка 'BACA' не содержится в переменной s.
  4. 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' соответственно.
  5. 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**

Untitled