У исполнителя Калькулятор две команды, которым присвоены номера:
1. прибавь 1
2. умножь на 2
Сколько есть программ, которые число 1 преобразуют в число 16?

Показать решение

print('informatikstr.ru')
a = [0] * 17
a[1] = 1
for i in range(2,17):
    a[i] = a[i] + a[i-1]
    if i % 2 == 0:
        a[i] = a[i] + a[i // 2]
print(a)

Ответ: 36


У исполнителя Калькулятор три команды, которым присвоены номера:
1. прибавь 1
2. умножь на 3
3. умножь на 4
Сколько есть программ, которые число 1 преобразуют в число 25?

Показать решение

print('informatikstr.ru')
def F(x, y):
    if x == y: return 1
    if x > y: return 0
    if x < y: return F(x + 1, y) + F(x * 3, y) + F(x * 4, y)
print (F(1, 25))

Ответ: 38


Исполнитель Июнь15 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на 2
Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя Июнь15 – это последовательность команд. Сколько существует программ, для которых при исходном числе 2 результатом является число 34 и при этом траектория вычислений содержит число 12?

Показать решение

print('informatikstr.ru')
def F(x, y):
    if x == y: return 1
    if x > y: return 0
    if x < y: return F(x + 1, y) + F(x * 2, y)
print (F(2, 12) * F(12, 34))

Ответ: 70


Исполнитель Июнь15 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на 2
Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя Июнь15 – это последовательность команд. Сколько существует программ, для которых при исходном числе 2 результатом является число 34 и при этом траектория вычислений содержит число 10 и не содержит число 28?

Показать решение

print('informatikstr.ru')
def F(x, y):
    if x == y: return 1
    if x > y or x == 28: return 0
    if x < y: return F(x + 1, y) + F(x * 2, y)
print (F(2, 10) * F(10, 34))

Ответ: 21


Исполнитель Простачок преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 2
2. Прибавить предыдущее
3. Прибавить следующее
Первая команда увеличивает число на 2, вторая – на предыдущее (например, число 5 будет преобразовано по правилу 5 + 4), третья – на следующее (аналогично, 5 по правилу 5 + 6 = 11). Сколько существует таких программ, которые исходное число 7 преобразуют в число 63, и при этом траектория вычислений не содержит число 43?

Показать решение

print('informatikstr.ru')
def F(x, y):
    if x == y: return 1
    if x > y or x == 43: return 0
    if x < y: return F(x + 2, y) + F(x + (x + 1), y) + F(x + (x - 1), y)
print (F(7, 63))

Ответ: 116