Задание 23. Информатика. ЕГЭ. Шастин. 30.11.2024
- Просмотры: 1412
- Изменено: 1 февраля 2025
(Д. Бахтиев) исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
- Прибавь \(1.\)
- Умножь на \(2.\)
- Умножь на \(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\)