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

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

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

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

Задача 1#75232

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

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

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

а) если число N делится на 4, то к этой записи слева дописывается 1;

б) если число N не делится на 4, то к этой записи справа дописывается 1.

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

Например, для исходного числа 1210 = 148  результатом является число 1148 = 7610  , а для исходного числа 6110 = 758  результатом является число 7518 = 48910  .

Сколько различных значений R, больших 590 и меньших 650, может быть получено с помощью полученного алгоритма? В ответе запишите это число в десятичной системе счисления.

Показать ответ и решение

В этой задаче нам нужно реализовать алгоритм, который по входному натуральному числу N строит новое число R через его восьмеричную запись. Сначала мы переводим число N в восьмеричную систему счисления, используя встроенную функцию oct, и убираем префикс 0o, чтобы получить чистую строку цифр в восьмеричной системе. Затем мы проверяем делимость числа N на 4: если число делится на 4 без остатка, мы добавляем цифру ’1’ в начало восьмеричной строки, а если не делится — добавляем ’1’ в конец этой строки. Полученная таким образом строка — это восьмеричное представление числа R. Для последующей проверки мы переводим эту строку обратно в десятичное число. После этого в диапазоне чисел от 1 до 199 мы перебираем все возможные N, применяем к ним описанный алгоритм, и проверяем, какие значения R получаются строго больше 590 и строго меньше 650. Все такие значения R собираем в множество, чтобы не считать повторяющиеся, и в итоге выводим количество уникальных значений.

a = set()  # Создаем множество для хранения уникальных значений R
for n in range(1, 200):
    s = oct(n)[2:]  # Переводим число n в восьмеричную систему счисления, убираем префикс ’0o’

    if n % 4 == 0:  # Если число n делится на 4 без остатка
        s = ’1’ + s  # Добавляем ’1’ в начало восьмеричной записи

    if n % 4 != 0:  # Если число n не делится на 4 без остатка
        s = s + ’1’  # Добавляем ’1’ в конец восьмеричной записи

    r = int(s, 8)  # Переводим полученную восьмеричную строку обратно в десятичное число

    if 590 < r < 650:  # Проверяем, что r строго больше 590 и меньше 650
        a.add(r)  # Добавляем значение r в множество, чтобы учитывать только уникальные значения

print(len(a))  # Выводим количество уникальных значений R, удовлетворяющих условию

Ответ: 21

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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