Тема 23. Оператор присваивания и ветвления
23.07 Количество результатов выполнения программ
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела оператор присваивания и ветвления
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#84017

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

1. Увеличь на 8

2. Уменьши на 4

3. Раздели на 2

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

Сколько различных натуральных результатов можно получить при исходном числе 16 в ходе исполнения программы, содержащей ровно 10 команд, если известно, что нельзя повторять третью команду, если она была использована на предыдущем шаге.

Показать ответ и решение
# Множество различных результатов работы программы
s = set()

# c - номер команды на предыдущем шаге
# k - счётчик количества совершенных команд
def f(a, c=0, k=0):
    if k == 10:
        if a >= 1:
            s.add(a)
        return
    f(a + 8, 1, k + 1)
    f(a - 4, 2, k + 1)
    if c != 3 and a % 2 == 0:
        f(a // 2, 3, k + 1)

f(16)

print(len(s))

Ответ: 67

Ошибка.
Попробуйте повторить позже

Задача 2#84016

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

1. Увеличь на 1

2. Умножь на 2

3. Умножь на 3

Программа для исполнителя – это последовательность команд.

Сколько существует программ, для которых при исходном числе 8 результатом является число 123, если известно, что после второй команды обязательно должна идти третья?

Показать ответ и решение
# c - номер команды на предыдущем шаге
def f(a, b, c=0):
    if a > b:
        return 0
    if a == b:
        return 1

    if c == 2:
        return f(a * 3, b, 3)
    return f(a + 1, b, 1) + f(a * 2, b, 2) + f(a * 3, b, 3)

Ответ: 111

Ошибка.
Попробуйте повторить позже

Задача 3#84015

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

1. Увеличь на 6

2. Увеличь на 9

3. Умножь на 3

Программа для исполнителя – это последовательность команд.

Сколько различных результатов можно получить при исходном числе 3 в ходе исполнения программы, содержащей ровно 9 команд, если известно, что повторять можно только первую команду, а вторую и третью - нельзя (после первой команды может идти любая другая, но после второй не может идти вторая, а после третьей - третья)?

Показать ответ и решение
# Множество различных результатов работы программы
s = set()

# c - номер команды на предыдущем шаге
# k - счётчик количества совершенных команд
def f(a, c=0, k=0):
    if k == 9:
        s.add(a)
        return
    f(a + 6, 1, k + 1)
    if c != 2:
        f(a + 9, 2, k + 1)
    if c != 3:
        f(a * 3, 3, k + 1)

f(3)

print(len(s))

Ответ: 292

Ошибка.
Попробуйте повторить позже

Задача 4#84014

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

1. Увеличь на 3

2. Увеличь на 5

3. Умножь на 2

4. Умножь на 3

Программа для исполнителя – это последовательность команд.

Сколько различных результатов можно получить при исходном числе 35 в ходе исполнения программы, содержащей ровно 18 команд, если известно, что нельзя повторять команду с тем же арифметическим действием, что и у сделанной на предыдущем шаге (после умножения нельзя повторять умножение, после сложения нельзя повторять сложение)?

Показать ответ и решение
# Множество различных результатов работы программы
s = set()

# c - номер команды на предыдущем шаге
# k - счётчик количества совершенных команд
def f(a, c=0, k=0):
    if k == 18:
        s.add(a)
        return
    if c != 1 and c != 2:
        f(a + 3, 1, k + 1)
        f(a + 5, 2, k + 1)
    if c != 3 and c != 4:
        f(a * 2, 3, k + 1)
        f(a * 3, 4, k + 1)

f(35)

print(len(s))

Ответ: 90924

Ошибка.
Попробуйте повторить позже

Задача 5#84012

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

1. Прибавь 3

2. Прибавь 7

3. Прибавь 1

4. Умножь на 2

5. Умножь на 4

6. Умножь на 1.5

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

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

Показать ответ и решение
# Множество различных результатов работы программы
s = set()
# 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)
f(10)
print(len(s))

Ответ: 2232

Ошибка.
Попробуйте повторить позже

Задача 6#61639

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

1. Прибавить 1.

2. Отнять 2.

3. Умножить на 3.

Первая команда увеличивает число на 1, вторая уменьшает число на 2, третья – умножает на 3. Сколько различных результатов можно получить из исходного числа 2 после выполнения программы, содержащей 20 команд, если известно, что запрещено повторять команду, сделанную на предыдущем шаге.

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,c,last = ’’): #Ввёдем в функцию 2 параметра: ’c’ и ’last’. Параметр ’c’ является счётчиком команд.
    # Параметр ’last’ записывает последнюю выполненную команду для того чтобы две одинаковые команды не совершались друг за другом
    if c == 20:A.add(a)
    if c < 20: # Пока количество команд меньше 20,мы изменяем число
        if last == ’’:
            f(a+1,c+1,’+1’)
            f(a-2,c+1,’-2’)
            f(a*3,c+1,’*3’)
        if last == ’+1’:
             f(a-2,c+1,’-2’)
             f(a*3,c+1,’*3’)
        if last == ’-2’:
            f(a + 1, c + 1, ’+1’)
            f(a*3,c+1,’*3’)
        if last == ’*3’:
            f(a+1,c+1,’+1’)
            f(a-2,c+1,’-2’)
A =set()
f(2,0)#Вызываем функцию
print(len(A))#Выводим количество различных результатов программы

Ответ: 35093

Ошибка.
Попробуйте повторить позже

Задача 7#59601

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

   1. Прибавить 3

   2. Умножить на 4

Программа для исполнителя - это последовательность команд. Сколько существует значений, в которые можно прийти не более чем за 8 команд из числа 2?

Показать ответ и решение
d = set()
def f(a,c,m): #В данной функции добавлены два параметра: ’c’ и ’m’.
    # Параметр ’c’ - это счётчик команд. Параметр ’m’ отвечает за количество команд в данном вычислении.
    if c > m:return 0
    if c == m:
        d.add(a)
        return
    if c < m:
        f(a+3,c+1,m)
        f(a*4,c+1,m)
ans = [f(2,0,0),f(2,0,1),f(2,0,2),f(2,0,3),f(2,0,4),f(2,0,5),f(2,0,6),f(2,0,7),f(2,0,8)]#Выполняем вызовы функций.
# В 3-ем параметре числа от 0 до 8,поскольку нас интересуют кол-во значений,в которой можно получить не более чем за 8 команд.
print(len(d))

Ответ: 340
Рулетка
Вы можете получить скидку в рулетке!