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

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

Задача 1#75085

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

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

2. Прибавить 5

Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе 31 результатом является число 113 и при этом траектория вычислений не содержит числа, кратные 5?

Показать ответ и решение
def f(a,b):
    if a > b or a % 5 == 0:return 0
    if a == b:return 1
    return f(a+4,b)+f(a+5,b)
print(f(31,113))

Ответ: 0

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

Задача 2#75084

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

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

2. Прибавить 5

3. Умножь на 3

4.Прибавь до кратного 2

Программа для исполнителя — это последовательность команд. Команда 1 прибавляет к числу 2. Команда 2 прибавляет к числу 5. Команда 3 умножает число на 3. Команда 4 прибавляет к числу такое значение (прибавлять ноль нельзя), чтобы в итоге получилось ближайшее число, кратное двум. Сколько существует программ, для которых при исходном числе 4 результатом является число 66 и при этом траектория вычислений содержит числа 15,23 и не содержит числа 42,56?

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,b):
    if a > b or a == 42 or a == 56:return 0
    if a == b:return 1
    return f(a+2,b)+f(a+5,b)+f(a*3,b)+f(a+(2-a%2),b)
print(f(4,15)*f(15,23)*f(23,66))

Ответ: 818626320

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

Задача 3#75083

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

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

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

3. Умножь на 4

Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе 12 результатом является число от 50 до 60(включительно) и при этом траектория вычислений не содержит число 33?

Показать ответ и решение
def f(a,b):
    if a > b or a == 33:return 0
    if a == b:return 1
    return f(a+2,b)+f(a+3,b)+f(a*4,b)
c = 0
for i in range(50,61):
    c += f(12,i)
print(c)

Ответ: 686306

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

Задача 4#75081

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

1. Уменьши на 1

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

3. Подели нацело на 2

Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе 60 результатом является число 10 и при этом траектория вычислений содержит числа 56,30,18?

Показать ответ и решение
def f(a,b):
    if a < b:return 0
    if a == b:return 1
    return f(a-1,b)+f(a-4,b)+f(a//2,b)
print(f(60,56)*f(56,30)*f(30,18)*f(18,10))

Ответ: 868140

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

Задача 5#75080

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

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

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

3. Умножь на 3

4. Прибавь до кратного 3

Программа для исполнителя — это последовательность команд. Команда 1 прибавляет к числу 1. Команда 2 прибавляет к числу 2. Команда 3 умножает число на 3. Команда 4 прибавляет к числу такое значение (прибавлять ноль нельзя), чтобы в итоге получилось ближайшее число, кратное трём. Сколько существует программ, для которых при исходном числе 3 результатом является число 77 и при этом траектория вычислений не содержит чётные числа?

Показать ответ и решение
def f(a,b):
    if a > b or a % 2 == 0:return 0
    if a == b:return 1
    return f(a+1,b)+f(a+2,b)+f(a*3,b)+f(a+(3-a%3),b)
print(f(3,77))

Ответ: 9521

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

Задача 6#75078

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

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

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

3. Возвеcти в квадрат

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

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,b):
    if a > b or a == 16:return 0
    if a == b:return 1
    return f(a+2,b)+f(a+3,b)+f(a*a,b)
print(f(2,33))

Ответ: 2332

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

Задача 7#75077

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

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

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

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

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

Показать ответ и решение
def f(a,b):
    if a > b:
        return 0
    if a == b:return 1
    return f(a+2,b)+f(a+3,b)+f(a*4,b)
print(f(2,16)*f(16,26))

Ответ: 182

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

Задача 8#75076

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

1. Уменьшить на 2

2. Поделить нацело на 3

Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе 123 результатом является число 2?

Показать ответ и решение
def f(a,b):
    if a < b:
        return 0
    if a == b:return 1
    return f(a-2,b)+f(a//3,b)
print(f(123,2))

Ответ: 563

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

Задача 9#75074

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

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

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

Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе 7 результатом является число 77?

Показать ответ и решение
def f(a,b):
    if a > b:
        return 0
    if a == b:return 1
    return f(a+2,b)+f(a*3,b)
print(f(7,77))

Ответ: 14

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

Задача 10#75073

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

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

  2. Прибавить цифру, равную последней цифре в числе

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

Вторая команда прибавляет к числу его последний разряд. Например, вторая команда переводит число 23 в число 26 (так как 23 + 3 = 26), а число 40 оставляет в таком же виде.

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

Показать ответ и решение
#определяем функцию
def f(a,b,com):
    #если начальное число равно конечному, то возвращаем 1
    if a == b:
        return 1
    #если начальное число больше конечного, то возвращаем 0
    if a > b:
        return 0
    #если номер команды 2 или 3, то можно использовать только 1 команду
    if com == 2 or com == 3:
        return f(a+3,b,1)
    #основные команды программы
    return f(a+3,b,1) + f(a + a % 10,b,2) + f(a*2,b,3)
#вывод количества программ, преобразующих число 13 в 52.
print(f(13,52,0))

Ответ: 147

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

Задача 11#75072

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

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

  2. Сделать четное

  3. Сделать нечетное

Первая из них увеличивает на 1 число x на экране, вторая умножает это число на 2, третья переводит число x в число 2x + 1. Например, вторая команда переводит число 10 в число 20, а третья переводит число 10 в число 21.

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

Показать ответ и решение
def f(a,b, c):
    if a == b: #если начальное число равно конечному, то вывести 1
        return 1
    if a > b: #если начальное число больше конечного, то вывести 0
        return 0
    #проверка того, что первая команда не 3 и не 5
    if c == 2 or c == 4:
        return f(a * 2, b, c + 1) + f(a * 2 + 1, b, c + 1)
    else:
        return f(a + 1, b, c + 1) + f(a * 2, b, c + 1) + f(a*2 +1, b, c + 1)
print(f(10,68,0))

Ответ: 4

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

Задача 12#75071

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

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

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

  3. Прибавить предыдущее

Сколько существует программ, которые преобразуют исходное число 7 в число 75 и при этом содержат не более 10 команд в последовательности?

Примечания: в команде 3 под предыдущим понимается число на единицу меньше чем обрабатываемое, то есть для 5 предыдущим будет 4.

Показать ответ и решение
def f(a,b, c):
#если начальное число равно конечному и число команд меньше или равно 10, вывести 1
  if a == b and c <= 10:
    return 1
#если начальное число больше конечного и число команд больше 10, вывести 0
  if a > b or (c > 10):
    return 0
#выполнение основных команд
  return f(a+1,b, c+1) + f(a*3,b,c+1) + f(a+(a-1), b, c+1)
print(f(7,75,0))

Ответ: 22

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

Задача 13#75070

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

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

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

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

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

Сколько существует программ, которые преобразуют исходное число 6 в число 38 так, что в процессе выполнения на экране цифра 2 появится не больше одного раза?

Показать ответ и решение
def f(a,b, two):
#подсчёт количества цифр 2
  if ’2’ in str(a):
      two += 1
#если начальное число равно конечному и число цифр 2 меньше или равно 1, вывести 1
  if a == b and two <= 1:
    return 1
#если начальное число больше конечного и число цифр 2 больше 1, вывести 0
  if a > b or (two == 1 and ’2’ in str(a)):
    return 0
#выполнение основных команд
  return f(a+1,b, two) + f(a+3,b,two) + f(a*2, b, two)+ f(a*5, b, two)
print(f(6,38,0))

Ответ: 197

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

Задача 14#75069

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

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

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

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

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

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

Показать ответ и решение
def f(a,b, mult):
#если начальное число равно конечному и число команд умножения меньше
#или равно 2, вывести 1
  if a == b and mult <= 2:
    return 1
#если начальное число больше конечного, вывести 0
  if a > b:
    return 0
    #если две команды умножения, то выполнять только сложение
  if mult == 2:
    return f(a+1,b,mult) + f(a+2,b, mult)
    #выполнение основных команд
  return f(a+1,b, mult) + f(a+2,b,mult) + f(a*2, b, mult + 1)+ f(a*4, b, mult + 1)
print(f(1,13,0))

Ответ: 729

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

Задача 15#75068

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

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

  2. Прибавить 4

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

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

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

Показать ответ и решение
def f(a,b,com = False):
#если начальное число равно конечному и одна команда умножения, вывести 1
  if a == b and com == True:
    return 1
#если начальное число больше конечного, вывести 0
  if a > b:
    return 0
#если команда умножения уже есть, то выполнять только сложение
  if com == True:
    return f(a+1,b,com) + f(a+4,b, com) + f(a+6,b, com)
    #выполнение основных команд
  return f(a+1,b) + f(a+4,b) + f(a+6,b) + f(a*3, b,True)
print(f(3,26))

Ответ: 456

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

Задача 16#75067

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

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

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

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

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

Показать ответ и решение
d = set() #создание списка
def f(a,c,m):
    if c > m:#если конечное значение больше числа команд, вывести 0
        return 0
    if c == m: #если конечное значение равно числу команд, вывести список
        d.add(a)
        return
        #если конечное значение меньше числа команд, выполнить команды
    if c < m:
        f(a+1,c+1,m)
        f(a*2,c+1,m)
        f(a*5, c + 1, m)
for i in range(3,8):
    f(10,0,i)
print(len(d))

Ответ: 1025

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

Задача 17#75066

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

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

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

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

Показать ответ и решение
d = set() #создание списка
def f(a,c,m):
    if c > m: #если конечное значение больше числа команд, вывести 0
        return 0
    if c == m: #если конечное значение равно числу команд, вывести список
        d.add(a)
        return
    #если конечное значение меньше числа команд, выполнить команды
    if c < m:
        f(a+4,c+1,m)
        f(a*3,c+1,m)
for i in range(11):
    f(5,0,i)
print(len(d))

Ответ: 1308

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

Задача 18#75065

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

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

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

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

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

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

Показать ответ и решение
d = set() #создание списка
def f(a,c,com):
    if c > 12:#если число команд больше 12, то вернуть 0
        return 0
    if c == 12: #если число команд равно 12, то вернуть список
        d.add(a)
        return
     #если число команд меньше 12, то продолжать выполнение команд
    if c < 12:
    #проверка того, что двух последовательных команд умножения и сложения нет
        if com == "1":
            f(a * 2, c+1, "2")
            f(a * 3, c+1, "2")
        elif com == "2":
            f(a + 1, c+1, "1")
            f(a + 3, c+1, "1")
        else:
            f(a + 1, c+1, "1")
            f(a + 3, c+1, "1")
            f(a * 2, c+1, "2")
            f(a * 3, c+1, "2")

f(6,0,"")
print(len(d))

Ответ: 2797

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

Задача 19#75064

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

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

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

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

Показать ответ и решение
d = set() #создание списка
def f(a,c,com1,com2):
    if c > 11:#если число команд больше 11, то вернуть 0
        return 0
    if c == 11: #если число команд равно 11, то вернуть список
        d.add(a)
        return
    #проверка того, что команда не повторяется более двух раз
    if com1 == com2 == "1":
        f(a*2,c+1, com2, "2")
    elif com1 == com2 == "2":
        f(a + 2, c+1, com2, "1")
    else:
        f(a * 2, c+1, com2, "2")
        f(a + 2, c+1, com2, "1")

f(1,0,"","")
print(len(d))

Ответ: 124

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

Задача 20#75062

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

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

  2. Увеличить каждый разрад в числе на 1.

Первая из них увеличивает число на экране на 3, вторая увеличивает на 1 каждую цифру числа, например число 34 с помощью такой команды превратится в число 45. Если цифра числа равна 9, то вторая команда оставляет эту цифру неизменной.

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

Показать ответ и решение
d = set() #создание списка
def f(a,c):
    if c > 9:#если число команд больше 9, то вернуть 0
        return 0
    if c == 9: #если число команд равно 9, то вернуть список
        d.add(a)
        return
    str1 = str(a)
    str2 = ’’
    for i in str1: #увеличение разрядов числа
        if int(i) < 9:
            str2 += str(int(i) + 1)
        else:
            str2 += i
    str2 = int(str2)
    if c < 9: #если число команд меньше 9, то продолжать выполнение команд
        f(a+3,c+1)
        f(str2,c+1)
f(81,0)
print(len(d))

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