Ах, ЕГЭ по информатике — тот самый экзамен, где даже калькулятор начинает нервничать и шептать: «Ну что ты от меня хочешь?» Если вы уже успешно освоили первые два типа заданий, поздравляю!
Теперь настало время для третьего типа — того самого, где нужно искать нули в числах и подбирать значение х так, чтобы их ровно столько-то. Звучит как вызов?
Ну что ж, давайте разбираться вместе, а заодно посмеёмся над нашими математическими приключениями.
Итак, представьте себе: у вас есть число. Не просто число — а такое огромное, что у него в троичной системе счисления столько нулей, что можно украшать ими новогоднюю ёлку.
В прошлых заданиях мы уже учились считать количество нужных цифр (обычно это были нули), теперь же нам предстоит не просто считать, а ещё и угадывать значение х из диапазона. Это как играть в лотерею с математикой — только шансы выиграть зависят от умения программировать.
Для начала вспомним старый добрый код поиска нулей в числе. Если бы программисты были волшебниками, то эта функция count_zero() была бы их волшебной палочкой.
Передаём ей число num и систему счисления sys — и она выдаёт нам количество нулей. Вот это сила! Кстати, анекдот на тему: программист говорит другу: «Я написал функцию count_zero(), теперь могу найти все нули в числе».
Друг отвечает: «А зачем? У меня жена всегда говорит мне: «Ты такой бесполезный!»» Вот так вот.
Теперь переходим к более серьёзной части нашего квеста — вычислению выражения 5^12 – x в троичной системе счисления с условием «ровно 6 нулей». Для тех, кто забыл школьную математику (не стыдно!), 5^12 — это почти четверть миллиарда (244 140 625).
Перебираем значения x от 6 до 1 — как будто выбираем идеальный размер носков на зиму: слишком много или слишком мало — не подходит. Перебор вручную напоминает попытки найти нужный пульт от телевизора среди кучки других пультов — долго и мучительно.
Но тут на помощь приходит наш верный помощник — программа! Мы пишем цикл с диапазоном range(1,7)[::-1] (да-да, Python умеет и переворачиваться!) и проверяем каждое значение x.
Как только количество нулей становится равным нужному числу — останавливаемся и радуемся жизни. Честное слово, программирование иногда похоже на поиск иголки в стоге сена… если этот стог сена был бы представлен огромным числом в троичной системе.
Если говорить серьёзно (ну хоть немного), то такой подход универсален.
Можно взять любое арифметическое выражение с неизвестным х из условия задания ЕГЭ по информатике и подставить его в шаблон программы. Например, возьмём задание 1425: там надо разобраться со сложным выражением 9 ⋅ 11210 + 8 ⋅ 11150 – x в одиннадцатеричной системе счисления и найти максимальное x ≤ 3000 при ровно 60 нулях. Звучит страшно?
А между тем программа справилась за пару секунд! Ответ оказался скромным – всего лишь 2992.
Ещё одна история из жизни программиста-студента: однажды я решил проверить работу функции для перебора значений x на примере задания с троичной системой счисления (задание 1410).
Нужно было найти максимум при одном единственном нуле в записи числа выражения 3100 – x. Запустил программу – получил ответ 1823. В голове сразу прокрутилась шутка: «Знаешь почему программисты не любят одиночество?
Потому что у них всегда есть хотя бы один нуль!» Ну ладно-ладно…