Задача к ЕГЭ по информатике на тему «количество результатов выполнения программ» №1

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

1. Прибавь 3

2. Прибавь 7

3. Прибавь 1

4. Умножь на 2

5. Умножь на 4

6. Умножь на 1.5

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

Сколько различных результатов можно получить при исходном числе 10 в ходе исполнения программы, содержащей не менее 1, но не более 8 команд, если известно, что совершать можно только команду, чей номер отличен по чётности от номера команды, совершенной на предыдущем шаге (например после команды 2 нельзя использовать команду 4, но можно команду 5)?

Программное решение:

# Множество различных результатов работы программы

# c — номер команды на предыдущем шаге, причём c = 0.5 для того, чтобы изначально сработали оба условия: и c % 2 != 0, и c % 2 != 1.
# k — счётчик количества совершенных команд
def f(a, c = 0.5, k = 0):
    if 1 <= k <= 8:
        s.add(a)
    elif k > 8:
        return 0
    if c % 2 != 0:
        f(a + 7, 2, k + 1)
        f(a * 2, 4, k + 1)
        if a % 2 == 0: 
            f(int(a * 1.5), 6, k + 1)
    if c % 2 != 1:
        f(a + 3, 1, k + 1)
        f(a + 1, 3, k + 1)
        f(a * 4, 5, k + 1)

s = set()
f(10)
print(len(s))

Ответ: 2232
Оцените статью
Я решу все!