Тема 5. Алгоритмы – анализ простейших алгоритмов

5.02 Запись числа в другой системе счисления

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – анализ простейших алгоритмов
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#75231

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1. Строится восьмеричная запись числа N.

2. Далее эта запись обрабатывается по следующим правилам:

а) если в записи числа больше четных цифр, то складывается сумма всех четных цифр в записи числа, переводится в восьмеричную систему счисления и дописывается в конец числа;

б) если в записи числа больше нечетных цифр, то складывается сумма всех нечетных цифр в записи числа, переводится в восьмеричную систему счисления и дописывается в конец числа;

в) если в записи числа одинаковое количество четных и нечетных цифр, то складывается сумма всех четных цифр в записи числа и делится нацело на 2, затем переводится в восьмеричную систему счисления и дописывается в конец числа;

Полученная таким образом запись является восьмеричной записью искомого числа R.

Например, для исходного числа 12  = 14
  10     8  результатом является число 142 = 98
   8    10  , а для исходного числа 7210 = 1108  результатом является число 11028 = 57810  .

Укажите максимальное число N, для которого искомое число R не больше 870. В ответе запишите это число в десятичной системе счисления.

Показать ответ и решение
for n in range(1, 1000):
    t = oct(n)[2:]  # Перевод числа в восьмеричную систему счисления
    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:]  # Добавляем к числу восьмеричную запись суммы чётных цифр, делённую на 2
    r = int(t, 8)  # Перевод в 10сс из 8сс
    if r <= 870:
        print(n)

Ответ: 108

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!