Ах, ЕГЭ по информатике — тот самый экзамен, где даже калькулятор начинает нервно курить в сторонке, а позиционные системы счисления превращаются в настоящее испытание для мозга! Представьте себе: вы сидите, пытаетесь понять, почему число 7 в седьмой системе счисления вдруг обретает какую-то магическую силу, а тут ещё и загадочный х — целое положительное число от 1 до 2030.
Да-да, именно так выглядит задание №14 на ЕГЭ по информатике, где надо не просто считать, а думать на уровне компьютерного процессора.
Помните старый анекдот про программиста? «Почему ты всегда считаешь в двоичной системе?» — «Потому что 10 — это не просто число, это стиль жизни!» Вот и в нашем случае все начинается с понимания позиционных систем счисления — двоичная (бинарная), восьмеричная и шестнадцатеричная.
Это как три друга: один говорит только «0» и «1», другой любит числа от 0 до 7, а третий вообще устраивает вечеринку с цифрами от 0 до F. Если вы думаете, что это шутка — вспомните свой последний экзамен по информатике!
И вот вам история из жизни. Мой знакомый Вася решил подготовиться к ЕГЭ по информатике и начал учить перевод чисел между системами счисления.
Перевёл десятичное число 255 в шестнадцатеричную систему и получил FF. Пошутил: «Ну всё, теперь я официально могу читать меню у программистов!» Но когда дело дошло до практики на экзамене — Вася понял, что без навыков быстрого перевода он будет считать нули и единицы всю ночь напролёт.
Задание №14 — это настоящий марафон для ума. Там вас ждёт арифметическое выражение вроде 7^170 + 7^100 – x, где x — та самая загадочная переменная.
Нужно найти её максимальное значение при условии, что в семеричной записи результата ровно 71 ноль. Представьте себе: ищешь x от 2030 вниз до 1 (потому что логично начать с максимума) и каждый раз проверяешь количество нулей в записи числа в седьмой системе счисления.
Если бы за такое терпение платили деньги — программисты уже давно стали бы миллионерами!
А теперь представьте реакцию вашего друга-программиста: «Ты серьезно будешь перебирать все значения x? Зачем? Напиши цикл for!» И правда, перебор значений с помощью цикла — дело святое.
Как говорил один мудрый IT-шник: «Перебор всех вариантов – лучший друг ленивого программиста». Главное здесь не забыть правильно реализовать функцию подсчёта нулей в числе при переводе его из десятичной системы в семеричную.
Кстати о функциях! В Python есть такая прелесть: можно написать функцию для перевода числа из десятичной системы в любую другую позиционную систему счисления.
Например:
«`python
def to_base(n, base):
digits = []
while n:
digits.append(str(n % base))
n //= base
return ».join(digits[::-1]) or ‘0’
«`
Вот эта функция превращает скучное десятичное число в симпатичный набор цифр любой системы счисления! А теперь добавим к ней подсчёт количества нулей:
«`python
num_in_base = to_base(number, 7)
zero_count = num_in_base.count(‘0’)
«`
И вот оно — решение задачи становится чуть легче! Правда, скорость выполнения всё равно играет роль: на экзамене всего три минуты на задание! Тут уже вспоминается анекдот про студента-программиста: «Профессор сказал написать программу за час… Студент написал программу за минуту… Остальные 59 минут он искал баги.»