Первые два типа 14 заданий ЕГЭ по информатике уже успешно освоены. Настало время заняться третьим типом!
Задания этого типа объединяют в себе черты уже рассмотренных: от первого нам достался поиск определённых цифр (обычно нулей) в значении арифметического выражения, а от второго – подбор неизвестного значения для числа х.
Давайте в этой статье вспомним, как мы определяли количество нужных цифр в прошлых заданиях, и научимся подбирать значения уже не конкретной цифры, а целого числа в рамках заданного диапазона.
Алгоритм решения
Сначала займемся поиском определённых цифр в числе. Для этого мы пользовались таким кодом:
В 14 заданиях третьего типа обычно требуется найти количество нулей в числе. Так что давайте перепишем этот код в виде функции count_zero(), в которую будем передавать число num, в котором и будем искать нули, и систему счисления sys, в которой это число записано:
Отлично, часть решения уже готова!
Теперь приступим ко второй части. Пусть у нас дано выражение 52 — х (где x – целое положительное число, не превышающее 6), записанное в троичной системе счисления. Нам нужно определить наибольшее значение х, при котором в троичной записи числа, являющегося значением данного арифметического выражения, содержится ровно 6 нулей.
Что же, давайте, как и в прошлый раз, сначала решим это задание ручным перебором, чтобы лучше понять суть нашего подхода.
Подсчитаем значение числа 512 – это будет 244 140 625. Теперь давайте перебирать значения неизвестной х от 6 до 1, вычислять значение арифметического выражения и переводить его в троичную систему счисления:
- х = 6: 244 140 625 – 6 = 244 140 619, в троичной записи – 122000101121222011, 5 нулей
- x = 5: 244 140 625 – 5 = 244 140 620, в троичной записи – 122000101121222012, 5 нулей
- x = 4: 244 140 625 – 4 = 244 140 621, в троичной записи – 122000101121222020, 6 нулей
Нужное значение для х найдено! Теперь давайте все это переложим на плечи нашей программы. Сначала повторим функцию для поиска нулей в числе:
После чего напишем цикл для перебора значений х от 6 до 1. Как уже говорилось ранее, для наглядности сделаем диапазон range(1, 7) и перевернём его срезом [::-1].
Далее просто запишем наше выражение в переменную num:
Осталось лишь подсчитать количество нулей в num на каждой итерации цикла с помощью нашей функции и, как только это количество будет равно 6, вывести значение х на экран и завершить цикл. В коде это будет выглядеть так:
А вся наша программа записывается следующим образом:
На это все! Давайте, как и в прошлых статьях, выведем шаблонный код решения с абстрактными переменными:
Наш алгоритм решения готов, давайте его протестируем на реальных заданиях.
Пример 1
Разберём задание с такой формулировкой:
«Значение арифметического выражения 9 ⋅ 11210 + 8 ⋅ 11150 – x, где x – целое положительное число, не превышающее 3000, записали в 11-ричной системе счисления. Определите наибольшее значение x, при котором в 11-ричной записи числа, являющегося значением данного арифметического выражения, содержится ровно 60 нулей.
В ответе запишите число в десятичной системе счисления.»
Итак, что нам сказано в условии:
- Подбирать значения будем от 2999 до 1 (не превышающее 3000)
- Работать будем с 11-чной системой счисления
- Требуется содержание ровно 60 нулей в значении арифметического выражения
Значит, в нашем шаблоне диапазон_из_условия заменяем на 3000, система_счисления – на 11, а требуемое_количество – на 60. Переписываем выражение из условия в num и решение готово. Выглядит оно так:
И в результате получаем ответ на это задание – число 2992.
Пример 2
Переходим к следующему заданию:
«Значение арифметического выражения 3100 — x, где x – целое положительное число, не превышающее 2030, записали в троичной системе счисления. Определите наибольшее значение x, при котором в троичной записи числа, являющегося значением данного арифметического выражения, содержится ровно один нуль.
В ответе запишите число в десятичной системе счисления.»
Сразу определим значения на замену:
- Диапазон – 2030
- Система счисления – 3
- Количество нулей – 1
Внесём изменения в шаблонный код:
Запускаем программу и получаем число 1823, которое и записываем в ответ.
Пример 3
И последнее задание в этой статье:
«Значение арифметического выражения 7350 + 7150 – x, где x – целое положительное число, не превышающее 2300, записали в семеричной системе счисления. Определите наибольшее значение x, при котором в семеричной записи числа, являющегося значением данного арифметического выражения, содержится ровно 200 нулей.
В ответе запишите число в десятичной системе счисления.»
Диапазон для неизвестного числа у нас все тот же, работаем теперь с семеричной системой и требуется наличие ровно 200 нулей в значении арифметического выражения. Отразим все это в нашем решении:
И получаем ответ на это задание – 2001.
Больше заданий данного типа с подробным решением вы можете найти в нашем тренажёре.