Найти в Дзене

Алгоритм решения задания 14 ЕГЭ по информатике. Часть 2

Оглавление

Ранее мы уже научились решать первый тип 14 заданий ЕГЭ по информатике. Теперь переходим к более сложному типу – второму. В этой статье разберёмся, как формировать алфавит для каждой системы счисления, как составлять выражения с неизвестными цифрами и освоим алгоритм решения второго типа 14 заданий. Давайте приступать!

Алгоритм решения

В 14 заданиях второго типа нам все так же дано некое арифметическое выражение, записанное в определённой системе счисления. Но в одном или нескольких членах этого выражения одна из цифр заменена на неизвестное x.

Нашей задачей является определить это значение x, при котором результат арифметического выражения будет удовлетворять заданному условию. Соответственно, эту задачу можем разделить на несколько частей:

  1. Запись каждого члена арифметического выражения в десятичной системе счисления
  2. Цикличный перебор значений x до тех пор, пока результат выражения не будет удовлетворять условию

Начнём с простого примера. Пусть у нас имеется такое арифметическое выражение: 1х21 + 4х2, записанное в привычной нам десятичной системе счисления. Нужно найти максимальное значение х, при котором результат данного выражения будет кратен 3. Давайте рассуждать.

Очевидно, что нам нужно перебирать все значения для переменной х от 9 до 0 (десятичные цифры), пока результат арифметического выражения не будет кратен трём. Можем сделать это даже вручную:

  1. х = 9: 1921 + 492 = 1423, не кратно 3
  2. x = 8: 1821 + 482 = 2303, не кратно 3
  3. x = 7: 1721 + 472 = 2193, кратно 3!

Отлично, мы нашли нужное значение х. Но не будем же каждый раз вручную подставлять значения и решать это выражение? Давайте придумаем программное решение этой задачи.

Мы будем использовать цикл for, который будет перебирать диапазон значений от 9 до 0. Как вы уже помните по прошлым статьям, более наглядно можно представить этот диапазон в виде range(0, 10) и перевернуть его срезом [::-1]. Записывается это так:

-2

В следующей строке нам нужно записать арифметическое выражение с неизвестным х. Воспользуемся для этого f-строками. Каждый член выражения запишем в своей строке, в которую будет подставляться значение х текущей итерации цикла: f’1{x}23′.

Но для арифметики нам понадобится перевести эту строку в десятичную систему счисления с помощью функции int(): int(f’1{x}23′, 10). Второй аргумент – число 10 – здесь указывать не следует. Но мы его оставим для наглядного сравнения с будущими вариациями этого кода.

Запишем оба члена арифметического выражения:

-3

И теперь само выражение:

-4

Осталось лишь проверить, что значение выражения кратно 3. Как только условие выполнится – выводим значение х и завершаем цикл.

-5

Весь наш код выглядит так:

-6

Что же, мы близки к выводу шаблонного кода решения второго типа 14 заданий. Осталось лишь разобраться с одним моментом: какой диапазон цифр брать, если предстоит работать с системой счисления, отличной от 10?

Для систем, меньших 10, все очевидно: просто указываем меньшее число в диапазоне. Но как быть с системами, в которых помимо привычных нам десятичных цифр есть еще и латинские буквы? Как их поместить в один диапазон с цифрами?

На самом деле решение этой задачи максимально простое. Нужно самостоятельно составить алфавит требуемой системы счисления! Это можно сделать как вручную, просто перечислив значения, например, так:

-7

Но здесь велик шанс ошибиться при вводе. Гораздо надёжнее будет воспользоваться уже готовыми константами из встроенного модуля string. Например, в константе printable есть все печатные символы: цифры, строчные и прописные латинские буквы, символы и так далее.

Самое полезное для нас – это то, что порядок символов совпадает с порядком цифр любой возможной системы счисления. То есть если вам нужны восьмеричные цифры, то просто воспользуйтесь срезом [:8]:

-8

А если нужны шестнадцатеричные цифры, то поменяйте в срезе цифру 8 на 16:

-9

Давайте поправим наш прошлый код и вместо диапазона будем использовать срез до 10 символа константы printable:

-10

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

-11

Вам остаётся лишь заменить наши абстрактные переменные на значения из условия задания, переписать члены арифметического выражения и по необходимости избавиться от среза [::-1], если требуется найти наименьшее значение х.

На этом весь алгоритм решения завершён! Давайте протестируем его на реальных примерах.

Пример 1

Начнём со следующей формулировки:

Задание 1408

«Операнды арифметического выражения записаны в системе счисления с основанием 25.
11353х1225 + 135х2125
В записи чисел переменной x обозначена неизвестная цифра из алфавита 25-ричной системы счисления. Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 24.

Для найденного x вычислите частное от деления значения арифметического выражения на 24 и укажите его в ответе в десятичной системе счисления.
Основание системы счисления указывать не нужно.»

Все, что от нас требуется – заменить в шаблонном коде переменную основание_системы на 25, а переменную требуемое_число – на 24. Тогда останется лишь корректно переписать оба члена арифметического выражения и запустить программу.

Полный код решения выглядит следующим образом:

-12

После его запуска видим на экране число 266249847, которое и запишем в ответ.

Пример 2

Рассмотрим еще одно задание с похожей формулировкой:

Задание 1424

«Операнды арифметического выражения записаны в системе счисления с основанием 29.
923х787429 + 524х615229
В записи чисел переменной х обозначена неизвестная цифра из алфавита 29-ричной системы счисления.
Определите наибольшее значение х, при котором значение данного арифметического выражения кратно 28.

Для найденного х вычислите частное от деления значения арифметического выражения на 28 и укажите его в ответе в десятичной системе счисления.
Основание системы счисления указывать не нужно.»

Решение здесь будет идентично предыдущему, разве что поменяем числа 25 на 29 и 24 на 28, да заново перепишем слагаемые арифметического выражения. Код будет выглядеть так:

-13

На экране видим число 3319197720, оно и будет ответом на это задание.

Пример 3

Ну и напоследок рассмотрим такую формулировку:

Задание 1414

«Операнды арифметического выражения записаны в системе счисления с основанием 21.

82934х221 + 2924xx721 + 67564х821

В записи чисел переменной x обозначена неизвестная цифра из алфавита 21-ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 20.

Для найденного значения x вычислите частное от деления значения арифметического выражения на 20 и укажите его в ответе в десятичной системе счисления. Основание системы счисления указывать не нужно.»

Здесь придётся добавить еще одну переменную n_3 с третьим слагаемым арифметического выражения. А также обратите внимание, что теперь нужно найти наименьшее значение х, так что от среза [::-1] мы избавляемся. В остальном – ничего необычного.

Код решения у нас будет таким:

-14

Запускаем программу и видим на экране число 72450445, которое и запишем в качестве ответа на задание.

На этом мы закончим рассмотрение второго типа 14 заданий ЕГЭ по информатике. Как видите, все решения шаблонные и не требуют от вас каких-то вдумчивых рассуждений. Главное – аккуратно переписывать выражения из условия задания и внимательно следить за всеми действиями.

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

<<< Предыдущая статья Следующая статья >>>