У исполнителя две команды с номерами. Нужно либо составить программу, переводящую одно число в другое, либо по известной программе восстановить неизвестный параметр b.
Составить программу
Идите от конечного числа к начальному и откатывайте команды: так перебор короче.
Обратная к «умножь на 2» возможна, только если число чётное.
Подходит любая программа, укладывающаяся в лимит команд.
Найти b
Пройдите по программе, записывая результат через b, и решите уравнение.
Или подставьте небольшие b: обычно ответ однозначный и небольшой.
Типичные ошибки
Перепутать номера команд.
Превысить допустимое число команд.
Записать ответ с пробелами или запятыми — нужны только цифры.
Разобранные варианты
Сначала реши сам, потом открой разбор. В задачах на программу засчитывается любой верный ответ.
Вариант 1
составить программу
У исполнителя Альфа две команды, которым присвоены номера: 1. прибавь 3 2. умножь на 3 Первая из них прибавляет к числу на экране 3, вторая — умножает число на 3. Составьте алгоритм получения из числа 6 числа 99, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Разбор
Идея: идём от конца. Смотрим, какой командой могло получиться число, и откатываем её. Обратная к «прибавь» — «вычти», к «умножь» — «раздели» (если делится), к «возведи в квадрат» — квадратный корень (если число — точный квадрат).
Подходящая программа: 12112. Проверим её с числа 6:
1 (прибавь 3): 6 → 9
2 (умножь на 3): 9 → 27
1 (прибавь 3): 27 → 30
1 (прибавь 3): 30 → 33
2 (умножь на 3): 33 → 99
Получили 99 за 5 команд — не больше 5. Другие верные программы тоже засчитываются.
Ответ: 12112
Решение на Python. Перебор всех программ длиной до 5 — печатает все подходящие.
from itertools import product
def step(c, x):
if c == '1':
return x + 3
return x * 3
for n in range(1, 6):
for prog in product('12', repeat=n):
x = 6
for c in prog:
x = step(c, x)
if x == 99:
print(''.join(prog))
Вариант 2
составить программу
У исполнителя Бета две команды, которым присвоены номера: 1. умножь на 3 2. прибавь 4 Первая из них умножает число на 3, вторая — прибавляет к числу на экране 4. Составьте алгоритм получения из числа 7 числа 83, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Разбор
Идея: идём от конца. Смотрим, какой командой могло получиться число, и откатываем её. Обратная к «прибавь» — «вычти», к «умножь» — «раздели» (если делится), к «возведи в квадрат» — квадратный корень (если число — точный квадрат).
Подходящая программа: 12122. Проверим её с числа 7:
1 (умножь на 3): 7 → 21
2 (прибавь 4): 21 → 25
1 (умножь на 3): 25 → 75
2 (прибавь 4): 75 → 79
2 (прибавь 4): 79 → 83
Получили 83 за 5 команд — не больше 5. Другие верные программы тоже засчитываются.
Ответ: 12122
Решение на Python. Перебор всех программ длиной до 5 — печатает все подходящие.
from itertools import product
def step(c, x):
if c == '1':
return x * 3
return x + 4
for n in range(1, 6):
for prog in product('12', repeat=n):
x = 7
for c in prog:
x = step(c, x)
if x == 83:
print(''.join(prog))
Вариант 3
составить программу
У исполнителя Омега две команды, которым присвоены номера: 1. умножь на 3 2. вычти 2 Первая из них умножает число на 3, вторая — вычитает из числа 2. Составьте алгоритм получения из числа 7 числа 165, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Разбор
Идея: идём от конца. Смотрим, какой командой могло получиться число, и откатываем её. Обратная к «прибавь» — «вычти», к «умножь» — «раздели» (если делится), к «возведи в квадрат» — квадратный корень (если число — точный квадрат).
Подходящая программа: 12121. Проверим её с числа 7:
1 (умножь на 3): 7 → 21
2 (вычти 2): 21 → 19
1 (умножь на 3): 19 → 57
2 (вычти 2): 57 → 55
1 (умножь на 3): 55 → 165
Получили 165 за 5 команд — не больше 5. Другие верные программы тоже засчитываются.
Ответ: 12121
Решение на Python. Перебор всех программ длиной до 5 — печатает все подходящие.
from itertools import product
def step(c, x):
if c == '1':
return x * 3
return x - 2
for n in range(1, 6):
for prog in product('12', repeat=n):
x = 7
for c in prog:
x = step(c, x)
if x == 165:
print(''.join(prog))
Вариант 4
составить программу
У исполнителя Бета две команды, которым присвоены номера: 1. умножь на 4 2. прибавь 3 Первая из них умножает число на 4, вторая — прибавляет к числу на экране 3. Составьте алгоритм получения из числа 6 числа 114, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Разбор
Идея: идём от конца. Смотрим, какой командой могло получиться число, и откатываем её. Обратная к «прибавь» — «вычти», к «умножь» — «раздели» (если делится), к «возведи в квадрат» — квадратный корень (если число — точный квадрат).
Подходящая программа: 12122. Проверим её с числа 6:
1 (умножь на 4): 6 → 24
2 (прибавь 3): 24 → 27
1 (умножь на 4): 27 → 108
2 (прибавь 3): 108 → 111
2 (прибавь 3): 111 → 114
Получили 114 за 5 команд — не больше 5. Другие верные программы тоже засчитываются.
Ответ: 12122
Решение на Python. Перебор всех программ длиной до 5 — печатает все подходящие.
from itertools import product
def step(c, x):
if c == '1':
return x * 4
return x + 3
for n in range(1, 6):
for prog in product('12', repeat=n):
x = 6
for c in prog:
x = step(c, x)
if x == 114:
print(''.join(prog))
Вариант 5
составить программу
У исполнителя Альфа две команды, которым присвоены номера: 1. прибавь 1 2. умножь на 4 Первая из них прибавляет к числу на экране 1, вторая — умножает число на 4. Составьте алгоритм получения из числа 7 числа 121, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Разбор
Идея: идём от конца. Смотрим, какой командой могло получиться число, и откатываем её. Обратная к «прибавь» — «вычти», к «умножь» — «раздели» (если делится), к «возведи в квадрат» — квадратный корень (если число — точный квадрат).
Подходящая программа: 21121. Проверим её с числа 7:
2 (умножь на 4): 7 → 28
1 (прибавь 1): 28 → 29
1 (прибавь 1): 29 → 30
2 (умножь на 4): 30 → 120
1 (прибавь 1): 120 → 121
Получили 121 за 5 команд — не больше 5. Другие верные программы тоже засчитываются.
Ответ: 21121
Решение на Python. Перебор всех программ длиной до 5 — печатает все подходящие.
from itertools import product
def step(c, x):
if c == '1':
return x + 1
return x * 4
for n in range(1, 6):
for prog in product('12', repeat=n):
x = 7
for c in prog:
x = step(c, x)
if x == 121:
print(''.join(prog))
Вариант 6
составить программу
У исполнителя Бета две команды, которым присвоены номера: 1. прибавь 1 2. возведи в квадрат Первая из них прибавляет к числу на экране 1, вторая — возводит число во вторую степень. Составьте алгоритм получения из числа 4 числа 50, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Разбор
Идея: идём от конца. Смотрим, какой командой могло получиться число, и откатываем её. Обратная к «прибавь» — «вычти», к «умножь» — «раздели» (если делится), к «возведи в квадрат» — квадратный корень (если число — точный квадрат).
Подходящая программа: 11121. Проверим её с числа 4:
1 (прибавь 1): 4 → 5
1 (прибавь 1): 5 → 6
1 (прибавь 1): 6 → 7
2 (возведи в квадрат): 7 → 49
1 (прибавь 1): 49 → 50
Получили 50 за 5 команд — не больше 5. Другие верные программы тоже засчитываются.
Ответ: 11121
Решение на Python. Перебор всех программ длиной до 5 — печатает все подходящие.
from itertools import product
def step(c, x):
if c == '1':
return x + 1
return x * x
for n in range(1, 6):
for prog in product('12', repeat=n):
x = 4
for c in prog:
x = step(c, x)
if x == 50:
print(''.join(prog))
Вариант 7
найти b
У исполнителя Вычислитель две команды, которым присвоены номера: 1. вычти 3 2. умножь на b (b — неизвестное натуральное число; b ≥ 2). Выполняя команду номер 1, Вычислитель вычитает из числа 3, а выполняя команду номер 2, умножает число на b. Программа для исполнителя Вычислитель — это последовательность номеров команд. Известно, что программа 22111 переводит число 11 в число 35. Определите значение b.
Разбор
Шаг 1. Выполним программу, обозначив неизвестное число буквой b, или подставим возможные значения b. Удобнее подстановка: команда 2 встречается 2 раза, поэтому результат быстро растёт с b.
Шаг 2. При b = 2:
2 (умножь на 2): 11 → 22
2 (умножь на 2): 22 → 44
1 (вычти 3): 44 → 41
1 (вычти 3): 41 → 38
1 (вычти 3): 38 → 35
Получили 35, что и требовалось. При других b результат другой: перебор b от 2 до 1000 даёт только 2.
Ответ: 2
Решение на Python. Перебираем b и выполняем программу.
for b in range(2, 1001):
x = 11
for c in '22111':
if c == '1':
x = x - 3
else:
x = x * b
if x == 35:
print(b)
Вариант 8
найти b
У исполнителя Альфа две команды, которым присвоены номера: 1. умножь на b 2. вычти 3 (b — неизвестное натуральное число; b ≥ 2). Выполняя команду номер 2, Альфа вычитает из числа 3, а выполняя команду номер 1, умножает число на b. Программа для исполнителя Альфа — это последовательность номеров команд. Известно, что программа 21212 переводит число 8 в число 107. Определите значение b.
Разбор
Шаг 1. Выполним программу, обозначив неизвестное число буквой b, или подставим возможные значения b. Удобнее подстановка: команда 1 встречается 2 раза, поэтому результат быстро растёт с b.
Шаг 2. При b = 5:
2 (вычти 3): 8 → 5
1 (умножь на 5): 5 → 25
2 (вычти 3): 25 → 22
1 (умножь на 5): 22 → 110
2 (вычти 3): 110 → 107
Получили 107, что и требовалось. При других b результат другой: перебор b от 2 до 1000 даёт только 5.
Ответ: 5
Решение на Python. Перебираем b и выполняем программу.
for b in range(2, 1001):
x = 8
for c in '21212':
if c == '1':
x = x * b
else:
x = x - 3
if x == 107:
print(b)
Вариант 9
найти b
У исполнителя Робик две команды, которым присвоены номера: 1. прибавь 3 2. умножь на b (b — неизвестное натуральное число; b ≥ 2). Выполняя команду номер 1, Робик прибавляет к числу на экране 3, а выполняя команду номер 2, умножает число на b. Программа для исполнителя Робик — это последовательность номеров команд. Известно, что программа 11212 переводит число 4 в число 265. Определите значение b.
Разбор
Шаг 1. Выполним программу, обозначив неизвестное число буквой b, или подставим возможные значения b. Удобнее подстановка: команда 2 встречается 2 раза, поэтому результат быстро растёт с b.
Шаг 2. При b = 5:
1 (прибавь 3): 4 → 7
1 (прибавь 3): 7 → 10
2 (умножь на 5): 10 → 50
1 (прибавь 3): 50 → 53
2 (умножь на 5): 53 → 265
Получили 265, что и требовалось. При других b результат другой: перебор b от 2 до 1000 даёт только 5.
Ответ: 5
Решение на Python. Перебираем b и выполняем программу.
for b in range(2, 1001):
x = 4
for c in '11212':
if c == '1':
x = x + 3
else:
x = x * b
if x == 265:
print(b)
Вариант 10
найти b
У исполнителя Омега две команды, которым присвоены номера: 1. прибавь 2 2. умножь на b (b — неизвестное натуральное число; b ≥ 2). Выполняя команду номер 1, Омега прибавляет к числу на экране 2, а выполняя команду номер 2, умножает число на b. Программа для исполнителя Омега — это последовательность номеров команд. Известно, что программа 12211 переводит число 12 в число 60. Определите значение b.
Разбор
Шаг 1. Выполним программу, обозначив неизвестное число буквой b, или подставим возможные значения b. Удобнее подстановка: команда 2 встречается 2 раза, поэтому результат быстро растёт с b.
Шаг 2. При b = 2:
1 (прибавь 2): 12 → 14
2 (умножь на 2): 14 → 28
2 (умножь на 2): 28 → 56
1 (прибавь 2): 56 → 58
1 (прибавь 2): 58 → 60
Получили 60, что и требовалось. При других b результат другой: перебор b от 2 до 1000 даёт только 2.
Ответ: 2
Решение на Python. Перебираем b и выполняем программу.
for b in range(2, 1001):
x = 12
for c in '12211':
if c == '1':
x = x + 2
else:
x = x * b
if x == 60:
print(b)
Для самостоятельного решения
Варианты 11–15 без разборов. Ответ можно проверить кнопкой.
Вариант 11
составить программу
У исполнителя Робик две команды, которым присвоены номера: 1. умножь на 2 2. прибавь 2 Первая из них умножает число на 2, вторая — прибавляет к числу на экране 2. Составьте алгоритм получения из числа 1 числа 40, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Вариант 12
найти b
У исполнителя Бета две команды, которым присвоены номера: 1. умножь на b 2. прибавь 5 (b — неизвестное натуральное число; b ≥ 2). Выполняя команду номер 2, Бета прибавляет к числу на экране 5, а выполняя команду номер 1, умножает число на b. Программа для исполнителя Бета — это последовательность номеров команд. Известно, что программа 12122 переводит число 3 в число 78. Определите значение b.
Вариант 13
составить программу
У исполнителя Робик две команды, которым присвоены номера: 1. умножь на 2 2. вычти 2 Первая из них умножает число на 2, вторая — вычитает из числа 2. Составьте алгоритм получения из числа 9 числа 24, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.
Вариант 14
найти b
У исполнителя Квадратор две команды, которым присвоены номера: 1. вычти 4 2. прибавь b (b — неизвестное натуральное число; b ≥ 2). Выполняя команду номер 1, Квадратор вычитает из числа 4, а выполняя команду номер 2, прибавляет к числу на экране b. Программа для исполнителя Квадратор — это последовательность номеров команд. Известно, что программа 21222 переводит число 9 в число 25. Определите значение b.
Вариант 15
составить программу
У исполнителя Альфа две команды, которым присвоены номера: 1. прибавь 1 2. умножь на 2 Первая из них прибавляет к числу на экране 1, вторая — умножает число на 2. Составьте алгоритм получения из числа 6 числа 32, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.