Задание 5 ОГЭ по информатике: решайте с автопроверкой
В задании 5 у исполнителя две команды, например «прибавь b» и «умножь на 3». Дана программа из номеров команд. Нужно найти неизвестное b, результат программы, исходное число или самую короткую программу. Вычисления короткие, но в них легко сбиться, поэтому программа, которая повторяет исполнителя, хорошо проверяет ответ.
Решать задачи номераКак решать программой
Программа исполнителя — это строка из цифр 1 и 2. Её легко выполнить циклом по символам: для «1» прибавляйте b, для «2» умножайте.
Неизвестное b находят перебором: для каждого b выполните программу и сравните результат с данным. Обычно подходит ровно одно b.
Самую короткую программу ищут перебором программ по возрастанию длины через itertools.product("12", repeat=k). Первая найденная и будет самой короткой.
Задачи на восстановление исходного числа решаются так же: переберите исходные числа и выполните программу для каждого. Когда команды обратимы, можно и пройти программу с конца, вычитая и деля.
Разбор примера
Исполнитель начинает с числа 5, выполняет программу 12121 и получает 136. Чему равно b?
start, program, result = 5, '12121', 136
for b in range(1, 1001):
x = start
for c in program:
x = x + b if c == '1' else x * 3
if x == result:
print(b)Программа печатает
7
При b = 7 число меняется так: 5, 12, 36, 43, 129, 136. Результат совпал с данным, а при других b он больше или меньше.
Решить эту задачуЗадачи к заданию 5
- Найдите неизвестное bЛёгкаяРешать
- Результат программы ВычислителяЛёгкаяРешать
- Восстановите исходное числоЛёгкаяРешать
- Самая короткая программаСредняяРешать
- Вычитание и квадратЛёгкаяРешать
- Сколько программ дают результатСредняяРешать
Бесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).
Вопросы и ответы
- Можно ли найти b без перебора?
- Да, уравнением: результат линейно зависит от b. Перебор проще и не даёт ошибок в алгебре.
- Как перебрать программы длины k?
- itertools.product("12", repeat=k) выдаёт все строки из единиц и двоек этой длины.
- Что если подходят несколько b?
- В задачах экзамена b единственное. Если программа печатает несколько, проверьте код.
- Что если команды другие, например «вычти» и «раздели»?
- Подход тот же: выполните программу по символам. Следите, чтобы деление было нацело, если так сказано в условии.