Найти в Дзене
Стив Май

Разбор ЕГЭ. Информатика. Задача №6

Оглавление

+Оглавление

Разбираем задачу №6 в ЕГЭ по информатике.

Обратите внимание, здесь будет не только пример решения, но и разбор задания по существу.

Для примера я беру демоверсию 2020 года (актуальная на момент написания статьи) с сайта fipi.ru.

Задание №6
Задание №6

Прежде чем приступать к решению этого примера, посмотрим в спецификацию к демоверсии.

Спецификация
Спецификация

Мы должны уметь исполнять алгоритм, записанный на обычном русском языке (без кодов программ), либо сами уметь составлять таковой.

Кодификатор
Кодификатор

В кодификаторе написано, в общем-то, то же самое: практические вычисления.

Немного об алгоритмах

У многих со словом "алгоритм" связывается только набор действий. На самом деле, в него включается ещё и исполнитель, который и будет делать эти действия. В нашем случае, исполнитель - человек, сам экзаменующийся. От него требуется чёткое последовательное исполнение всех команд.

Алгоритмы в школьной программе разделяют на три основные группы:

  1. линейные,
  2. ветвящиеся,
  3. циклические.

Первая группа - те алгоритмы, в которых команды выполняются одна за другой.

Во второй группе есть команда, которая иногда выполняется, а иногда нет - в зависимости от решения, которое принимает исполнитель. Это решение должно быть основано на тексте программы и имеющихся данных.

Третья группа требует от нас повторения команды нужное количество раз или "до тех пор пока".

О самой задаче №6

В какой-то степени, мы имеем обратную задачу. В том смысле, что у нас имеется алгоритм (линейный), но нет исходных данных. Однако у нас нет и результата работы алгоритма, а есть только ограничения на него ("минимальное" и "превышает 97"), поэтому подбор в нормальном виде осуществить не удастся. И всё же, работать надо именно в этом направлении. Можно построить подбор на таком принципе:

выбираем исходные данные, выполняем алгоритм, проверяем, подходит ли результат по критериям.

Именно в 6м задании ЕГЭ есть несколько существенных упрощений, без которых в общем случае решить эту задачу невозможно или крайне трудно (поэтому тут и нет чего-то типа формулы Кардано):

  • Работа ведётся в целых числах, поэтому подбор можно заменить на перебор.
  • Алгоритм всегда задаётся таким образом, чтобы выбирая бóльшее исходное число, мы получали бы бóльший результат (иногда наоборот - меньший).
  • Алгоритм достаточно прост, чтобы можно было его выполнить быстро и/или оптимизировать для большого набора подряд идущих чисел.

Воспользуемся этим при решении.

Решение

Для начала (это лучше делать не на экзамене, а за пару месяцев до него) надо потренироваться выполнять предложенный алгоритм. Даже если у нас есть какие-то предположения или домыслы о том, какие числа хорошо бы брать, начинать стоит с таких чисел, с которыми алгоритм выполнится легко. По ходу алгоритма надо:

1. Построить двоичную запись исходного числа, поэтому берём числа, которые можно просто и без проблем перевести (читайте об экспресс-методах перевода в двоичную систему):

Перевод десятичного числа 65 в двоичную систему счисления (с подробностями)
Перевод десятичного числа 65 в двоичную систему счисления (с подробностями)

2. а. Складываем все цифры (1+0+0+0+0+0+1=2), вычисляем остаток от деления на 2 (2 mod 2 = 0) и дописываем его в конец: 10000010

2. б. Складываем все цифры (1+0+0+0+0+0+1+0=2), вычисляем остаток от деления на 2 (2 mod 2 = 0) и дописываем его в конец: 100000100

Полученное число переводим в десятичную:

Перевод обратно (тоже с деталями)
Перевод обратно (тоже с деталями)

Теперь у нас есть исходные данные, алгоритм и результат.

Вход, алгоритм, выход
Вход, алгоритм, выход

Осталось проверить, подходит ли по критерию результат. 260 превосходит 97... ээээ... Но является ли оно наименьшим? Попробуем получить число меньше.

Воспользуемся второй особенностью, и попробуем взять что-то, что меньше 65.

Наша задача найти границу - такое число, результат работы с которым ещё подходит под условие "превосходит 97", а если взять число на 1 меньшее - уже нет.
Здесь без подробностей: из 25 получилось 102
Здесь без подробностей: из 25 получилось 102

Как видим, есть ещё число 102, которое больше подходит по критериям: оно превосходит 97 и является меньшим, чем предыдущее. Для точного попадания нам надо взять число ещё меньше, и проверить его.

24 преобразуется в 96. Оно уже не подходит! Значит, если мы возьмём пару

25 -> 102

то это и будет наименьший результат, который превосходит 97. Задача решена. Осталось понять, что пишем в ответе - исходные данные, или результат (мы подбирали и то, и другое).

может являться результатом работы данного алгоритма.

однозначно указывает на то, что нужен результат. Это 102.

Важно, что с любым числом каждый шаг алгоритма исполнять в точности. Тут могут быть две проблемы. Первая - извечная - смысловое чтение текста. Понять, что требуется сделать без предварительной подготовки бывает трудно. Для этого я написал в конце статьи кое-что об алгоритмах такого типа. Вторая проблема - даже понявшие алгоритм ученики любят пропускать пункты, делая их даже не в уме, а вспоминая результат из аналогичной ситуации. Этого делать нельзя,

если пункт есть - изволь выполнить его в точности.

На поиск этого числа отводится 4 минуты, и если пользоваться быстрыми методами перевода в двоичную и обратно, можно за это время перебрать 5-6 чисел. Но что делать, если время уходит, а граница так и не найдена?

Хитрости и облегчение подбора.

После одного-двух проходов, у Вас может появиться свой способ оптимизировать работу - ваш личный. Им и надо пользоваться, не слушая ни кого. Быстрее способа для Вас не будет.

Анализ алгоритма

При работе алгоритма число в двоичной форме увеличивается на 2 разряда справа. Те, кто хорошо знает особенности позиционных систем счисления, понимают, что если вы к числу справа припишите 0, то оно увеличится в... 10 раз? нет. Это было в десятичной системе. Там умножение на 10 вносило новый "ноль" справа.

в системах с другим основанием увеличение будет во столько раз, сколько в этой системе записывается как "10".

В восьмеричной 8 записывается как "10", в троичной 3. А в двоичной "10" - это число 2. Во всех случаях это совпадает с основанием системы счисления. Значит, у нас число во время работы алгоритма два раза увеличивается в 2 раза.

Ремарка. При приписывании к записи числа в системе с основанием N справа не нуля, а единицы (или другой цифры) даёт увеличение не ровно в N раз, а примерно в N раз (от N до N+1 раз). Например, в десятичной 131 ≈ 13*10. Для прикидки и уменьшения поля перебора можно пользоваться и такой особенностью.

Значит, если мы возьмём число 10, то после работы алгоритма получим что-то около 10*2*2=40, может, чуть больше. Нам нужно найти число, которое при увеличении в 4(или чуть больше) раза даст нам то, что подойдёт по критерию. (А всем понятно, что дважды в два раза - это всё равно, что в четыре раза?)

Именно из этих соображений я взял 24,25 и 26. 25 подошло, 24 нет, а 26 проверять уже не было смысла.

Практическая значимость алгоритма

Если кто-то ещё не понял, что ЕГЭ полностью определяется практическими, жизненными задачами, расскажу, где применяется этот алгоритм.

При передаче информации для определения нечётных ошибок (одна, три, 5 и т д) в конец сообщения добавляют биты чётности. Один или два бита таким образом, чтобы в сообщении было чётное (или нечётное) количество единиц. Если в полученном сообщении чётность нарушена, значит, передача пошла с ошибкой, и надо запрашивать ещё раз. Это самый помой способ отловить часть ошибок передачи. На столько простой, что в некоторых системах связи реализован аппаратно (com, usart).

Если требуется обнаружить все ошибки, то используются более сложные алгоритмы расчёта контрольных сумм. В штрихкоде на товаре в супермаркете последняя цифра не несёт информации о товаре, она вычисляется из остальных. И когда товар "не бьётся", это значит, что считанная контрольная сумма не совпала с расчётной, значит, при чтении кода произошла ошибка. Аналогичная ситуация с последними цифрами номера банковских карт.

В QR кодах тоже есть избыточная информация, и она позволяет не только обнаружить ошибку, но и исправить её (коды Хэмминга)

И все это - 6 задание ЕГЭ.

Другие варианты задания

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

Перечислю те, которые я замечал в заданиях:

  • Приписывание цифры справа увеличивает число в N+ раз (как у нас с учётом ремарки)
  • Умножение на N можно заменить на приписывание нуля справа к записи числа в системе с основанием N
  • В системе с основанием N нет цифры N или больше
  • Сумма двух цифр записи числа в системе с основанием N не превосходит 2N-2

На последней закономерности построено аналогичное задание из ОГЭ.

PS

Надеюсь, разбор был достаточно подобным. Ставьте лайк, подписывайтесь на канал.

Наука
7 млн интересуются