5.02 Запись числа в другой системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится шестнадцатиричная запись числа N.
2. Далее эта запись обрабатывается по следующим правилам:
а) если целая часть среднего значения цифр в числе N больше 5, то к записи в начало дописывается 1;
б) если целая часть среднего значения цифр в числе N меньше или равно 5, то к записи в начало дописывается 2.
Полученная таким образом запись является шестнадцатиричной записью искомого числа R.
Например, для исходного числа результатом является число
, а для исходного числа
результатом является число
.
Укажите минимальное число N, для которого искомое число R большее 310, но меньше 350. В ответе запишите это число в десятичной системе счисления.
В данной задаче мы сталкиваемся с алгоритмом преобразования натурального числа N в новое число R, используя шестнадцатеричную систему счисления. Сначала нам необходимо представить исходное число N в шестнадцатеричной системе. Для этого мы используем встроенную функцию Python hex(), которая возвращает строковое представление числа с префиксом ’0x’, поэтому мы берём срез строки, начиная с третьего символа ([2:]), чтобы получить только шестнадцатеричные цифры числа без префикса.
Далее мы считаем среднее арифметическое цифр десятичного числа N. Для этого мы сначала преобразуем число N в строку, затем применяем функцию map с int, чтобы получить последовательность цифр в виде целых чисел. Суммируем эти цифры и делим на количество цифр, используя целочисленное деление //, что позволяет получить целую часть среднего значения. Это значение сравниваем с числом 5: если среднее больше 5, то в шестнадцатеричную запись числа N мы добавляем слева символ ’1’, иначе — символ ’2’.
Полученная строка теперь является шестнадцатеричной записью искомого числа R. Для дальнейших вычислений мы преобразуем её обратно в десятичное число с помощью функции int() с основанием 16. После этого проверяем, входит ли число R в заданный интервал (больше 310 и меньше 350). При первом же выполнении этого условия выводим число N и прерываем цикл, поскольку задача просит найти минимальное такое N.
for n in range(1, 1000): # Перебираем числа N от 1 до 999 включительно t = hex(n)[2:] # Переводим число N в шестнадцатеричную систему счисления, убирая префикс ’0x’ # Преобразуем число N в строку и с помощью map(int, ...) получаем последовательность его цифр # Затем считаем сумму этих цифр и делим на их количество целочисленно, # чтобы получить целую часть среднего арифметического значения цифр числа N avg = sum(map(int, str(n))) // len(str(n)) if avg > 5: # Если целая часть среднего значения цифр больше 5 t = ’1’ + t # Дописываем ’1’ слева от шестнадцатеричной записи числа else: # Если целая часть среднего значения цифр меньше или равна 5 t = ’2’ + t # Дописываем ’2’ слева от шестнадцатеричной записи числа r = int(t, 16) # Переводим полученную строку из шестнадцатеричной системы в десятичную if r > 310 and r < 350: # Проверяем, входит ли число R в интервал (310, 350) print(n) # Выводим минимальное число N, для которого R попадает в заданный интервал break # Прекращаем перебор, так как ответ найден
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!