решай.ai · шпаргалка

Задание 5: Простой линейный алгоритм для формального исполнителя

ОГЭ Информатика

Как выглядит

Типовая формулировка звучит так: у исполнителя (Альфа, Бета, Гамма и т. п.) есть две команды с номерами 1 и 2. Команда 1 — «прибавь aa» (число aa конкретное: 1, 2, 3 и так далее), команда 2 — «умножь на bb», где bb — неизвестное натуральное число, b≥2b \ge 2. Программа записана как последовательность цифр, например 12111 или 11211. Дано, что при выполнении этой программы конкретное число (например, 6 или 7) переходит в другое конкретное число (например, 82 или 51). Требуется найти значение bb.

…

Что нужно знать

  • Линейный алгоритм — последовательность команд, которые выполняются одна за другой строго в порядке их записи, без пропусков, повторов и условных переходов.
  • Команда «прибавь aa» переводит число xx в число x+ax+a: x→x+ax \to x+a.
  • Команда «умножь на bb» переводит число xx в число x⋅bx \cdot b: x→x⋅bx \to x \cdot b.
  • Программа записывается как строка цифр-номеров команд; например, запись 11211 означает выполнение команд в порядке: 1, 1, 2, 1, 1.
  • Применение программы к числу — это композиция функций: результат каждого шага становится входным значением для следующего шага.
  • По условию задачи bb — натуральное число и b≥2b \ge 2 (единица не подходит, так как умножение на 1 не меняет число, что обычно противоречит смыслу задачи).
  • После разбора программы получается уравнение вида k⋅b+m=Nk \cdot b + m = N, где kk и mm — числа, найденные из последовательности команд, а NN — известный конечный результат. Уравнение решается стандартно: b=N−mkb = \dfrac{N-m}{k}.
  • Обратная операция для «прибавь aa» — «вычти aa» (x→x−ax \to x-a), для «умножь на bb» — «раздели на bb» (x→x/bx \to x/b); эти обратные операции полезны при движении от конца программы к началу.

Алгоритм

  1. Выписать, что означает команда 1 и что означает команда 2 (какое число прибавляется, что множитель — неизвестное bb).
  2. Прочитать программу как последовательность цифр и определить порядок выполнения команд слева направо.
  3. Взять исходное число и последовательно применять к нему команды, при умножении оставляя буквенный множитель bb, не пытаясь его сразу вычислить.
  4. После прогона всей программы получить итоговое выражение в виде k⋅b+mk\cdot b+m (число kk показывает, во сколько раз множитель bb участвует в итоговом коэффициенте, mm — накопленное слагаемое).
  5. Составить уравнение: полученное выражение равно заданному конечному числу.
  6. Решить уравнение относительно bb.
  7. Проверить, что bb — натуральное число и b≥2b\ge2; если условие не выполняется, пересчитать шаги 3–4, скорее всего, ошибка в порядке команд или в арифметике. …

Ловушки

  • Перепутан порядок выполнения команд. Программа читается строго слева направо, но иногда её по ошибке читают справа налево или переставляют шаги местами — это сразу даёт неверный коэффициент при bb.
  • Умножение применяется не ко всему накопленному числу. Частая ошибка — умножать на bb только исходное число, забывая, что до умножения уже были выполнены другие команды и число успело измениться.
  • Ошибка при раскрытии умножения суммы. Если умножение стоит не первым шагом, а после нескольких прибавлений, важно умножить на bb именно то число, которое накопилось к этому моменту, а не исходное.
  • Неверный подсчёт числа повторений команды после умножения. После того как в выражении появился bb, к нему по инерции продолжают прибавлять слагаемые — легко забыть или, наоборот, добавить лишний шаг. …
reshay.ai/oge/informatika/zadanie-5 — задачи с разборами и тренажёр

Полный гайд и задачи задания 5 →