5.02 Запись числа в другой системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится восьмеричная запись числа N.
2. Далее эта запись обрабатывается по следующим правилам:
а) если в записи числа больше четных цифр, то складывается сумма всех четных цифр в записи числа, переводится в восьмеричную систему счисления и дописывается в конец числа;
б) если в записи числа больше нечетных цифр, то складывается сумма всех нечетных цифр в записи числа, переводится в восьмеричную систему счисления и дописывается в конец числа;
в) если в записи числа одинаковое количество четных и нечетных цифр, то складывается сумма всех четных цифр в записи числа и делится нацело на 2, затем переводится в восьмеричную систему счисления и дописывается в конец числа;
Полученная таким образом запись является восьмеричной записью искомого числа R.
Например, для исходного числа результатом является число
, а для исходного числа
результатом является число
.
Укажите максимальное число N, для которого искомое число R не больше 870. В ответе запишите это число в десятичной системе счисления.
В этом задании нам необходимо реализовать алгоритм, который строит новое число R по заданному натуральному числу N, используя восьмеричную запись числа N. Сначала мы переводим число N в строку, которая представляет его восьмеричное представление, используя встроенную функцию oct и убирая префикс 0o. Затем подсчитываем количество чётных и нечётных цифр в этой записи — для этого считаем, сколько раз встречаются цифры 0, 2, 4, 6 (чётные) и 1, 3, 5, 7 (нечётные) с помощью функции .count(). После этого мы суммируем соответствующие цифры в зависимости от того, каких цифр больше в записи числа. Если чётных цифр больше, то складываем все чётные цифры, переводим сумму обратно в восьмеричную систему и дописываем полученную строку справа к исходной записи. Если нечётных цифр больше, то аналогично складываем все нечётные цифры, переводим сумму в восьмеричную запись и добавляем её справа. Если количество чётных и нечётных цифр одинаково, то считаем сумму всех чётных цифр, делим её нацело на 2, переводим результат в восьмеричную систему и дописываем справа. После этого полученную новую восьмеричную запись числа R мы переводим обратно в десятичную систему для проверки условия, что R не больше 870. Для всех чисел от 1 до 999, удовлетворяющих этому условию, выводим исходное число N, при этом максимальное из них будет нашим ответом.
for n in range(1, 1000): t = oct(n)[2:] # Перевод числа n в восьмеричную систему счисления (убираем префикс ’0o’) # Подсчёт количества чётных и нечётных цифр в восьмеричной записи числа count_even = t.count(’0’) + t.count(’2’) + t.count(’4’) + t.count(’6’) count_odd = t.count(’1’) + t.count(’3’) + t.count(’5’) + t.count(’7’) sum_digits = 0 # Инициализация переменной для суммы цифр if count_even > count_odd: # Если чётных цифр больше for i in t: if int(i) % 2 == 0: # Суммируем только чётные цифры sum_digits += int(i) t += oct(sum_digits)[2:] # Добавляем к восьмеричной записи число суммы в восьмеричной записи elif count_odd > count_even: # Если нечётных цифр больше for i in t: if int(i) % 2 != 0: # Суммируем только нечётные цифры sum_digits += int(i) t += oct(sum_digits)[2:] # Добавляем к восьмеричной записи число суммы в восьмеричной записи else: # Если количество чётных и нечётных цифр одинаково for i in t: if int(i) % 2 == 0: # Суммируем чётные цифры sum_digits += int(i) t += oct(sum_digits // 2)[2:] # Добавляем половину суммы (делённой нацело) в восьмеричной записи r = int(t, 8) # Переводим полученную восьмеричную запись обратно в десятичное число if r <= 870: # Проверяем условие, что число R не больше 870 print(n) # Выводим подходящее значение исходного числа N
Специальные программы

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

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

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

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

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

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