Задание 23. Информатика. ЕГЭ. Шастин. 30.11.2024

Просмотры: 1412
Изменено: 1 февраля 2025

(Д. Бахтиев) исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:

  1. Прибавь \(1.\)
  2. Умножь на \(2.\)
  3. Умножь на \(3.\)

Команда \(A\) увеличивает число на экране на \(1\); команда \(B\) увеличивает число на экране в два раза; команда \(C\) увеличивает число в \(3\) раза. Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе \(10\) результатом является число \(70\) и при этом траектория вычислений содержит число \(30\) или число \(60,\) но не оба числа одновременно?

Траектория вычислений программы — это последовательность результатов выполнения всех команд прораммы. Например, для программы \(ABB\) при исходном числе \(4\) траектория состоит из чисел \(5,\) \(10,\) \(20.\)

Решение:

Python


def f(n, t, c):
    if n == 30 or n == 60:
        c += 1
    if n > t:
        return 0
    if n == t:
        if c == 1:
            return 1
        else:
            return 0
    return f(n + 1, t, c) + f(2 * n, t, c) + f(3 * n, t, c)

print(f(10, 70, 0))

Другой способ


def f(n, t, d):
    if n > t or n == d:
        return 0
    if n == t:
        return 1
    return f(n + 1, t, d) + f(2 * n, t, d) + f(3 * n, t, d)

print(f(10, 30, 0) * f(30, 70, 60) + f(10, 60, 30) * f(60, 70, 0))

Ответ: \(95\)