ОГЭ по информатике · задание 5

Исполнитель с двумя командами

У исполнителя две команды с номерами. Нужно либо составить программу, переводящую одно число в другое, либо по известной программе восстановить неизвестный параметр b.

Составить программу

  • Идите от конечного числа к начальному и откатывайте команды: так перебор короче.
  • Обратная к «умножь на 2» возможна, только если число чётное.
  • Подходит любая программа, укладывающаяся в лимит команд.

Найти b

  • Пройдите по программе, записывая результат через b, и решите уравнение.
  • Или подставьте небольшие b: обычно ответ однозначный и небольшой.

Типичные ошибки

  • Перепутать номера команд.
  • Превысить допустимое число команд.
  • Записать ответ с пробелами или запятыми — нужны только цифры.

Разобранные варианты

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

Вариант 1

составить программу

У исполнителя Альфа две команды, которым присвоены номера:
1. прибавь 3
2. умножь на 3
Первая из них прибавляет к числу на экране 3, вторая — умножает число на 3. Составьте алгоритм получения из числа 6 числа 99, содержащий не более 5 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.

Разбор

Идея: идём от конца. Смотрим, какой командой могло получиться число, и откатываем её. Обратная к «прибавь» — «вычти», к «умножь» — «раздели» (если делится), к «возведи в квадрат» — квадратный корень (если число — точный квадрат).

Подходящая программа: 12112. Проверим её с числа 6:

  1. 1 (прибавь 3): 6 → 9
  2. 2 (умножь на 3): 9 → 27
  3. 1 (прибавь 3): 27 → 30
  4. 1 (прибавь 3): 30 → 33
  5. 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. 1 (умножь на 3): 7 → 21
  2. 2 (прибавь 4): 21 → 25
  3. 1 (умножь на 3): 25 → 75
  4. 2 (прибавь 4): 75 → 79
  5. 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. 1 (умножь на 3): 7 → 21
  2. 2 (вычти 2): 21 → 19
  3. 1 (умножь на 3): 19 → 57
  4. 2 (вычти 2): 57 → 55
  5. 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. 1 (умножь на 4): 6 → 24
  2. 2 (прибавь 3): 24 → 27
  3. 1 (умножь на 4): 27 → 108
  4. 2 (прибавь 3): 108 → 111
  5. 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:

  1. 2 (умножь на 4): 7 → 28
  2. 1 (прибавь 1): 28 → 29
  3. 1 (прибавь 1): 29 → 30
  4. 2 (умножь на 4): 30 → 120
  5. 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 (прибавь 1): 4 → 5
  2. 1 (прибавь 1): 5 → 6
  3. 1 (прибавь 1): 6 → 7
  4. 2 (возведи в квадрат): 7 → 49
  5. 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:

  1. 2 (умножь на 2): 11 → 22
  2. 2 (умножь на 2): 22 → 44
  3. 1 (вычти 3): 44 → 41
  4. 1 (вычти 3): 41 → 38
  5. 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:

  1. 2 (вычти 3): 8 → 5
  2. 1 (умножь на 5): 5 → 25
  3. 2 (вычти 3): 25 → 22
  4. 1 (умножь на 5): 22 → 110
  5. 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. 1 (прибавь 3): 4 → 7
  2. 1 (прибавь 3): 7 → 10
  3. 2 (умножь на 5): 10 → 50
  4. 1 (прибавь 3): 50 → 53
  5. 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. 1 (прибавь 2): 12 → 14
  2. 2 (умножь на 2): 14 → 28
  3. 2 (умножь на 2): 28 → 56
  4. 1 (прибавь 2): 56 → 58
  5. 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 команд. В ответе запишите только номера команд. Если таких алгоритмов более одного, то запишите любой из них.