На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
- Строится двоичная запись числа N.
- Далее эта запись обрабатывается по следующему правилу:
- если сумма цифр двоичной записи числа чётная, то к этой записи справа дописывается 0, а затем два левых разряда заменяются на 10;
- если сумма цифр двоичной записи числа нечётная, то к этой записи справа дописывается 1, а затем два левых разряда заменяются на 11;
Полученная таким образом запись является двоичной записью искомого числа R.
- Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 6 = 1102 результатом является число 10002 = 8, а для исходного числа 4 = 1002 это число 11012 = 13.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, больше 50.
В ответе запишите это число в десятичной системе счисления.
Ответ:
ЕГЭ по информатике Основная волна 07.06.2024 kompege.ru – задание №5
Решение:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
for i in range(1, 1000): n = bin(i)[2:] if n.count('1')%2 == 0: n = n + '0' n = '10' + n[2:] else: n = n + '1' n = '11' + n[2:] r = int(n, 2) if r > 50: print(i) break |
- for i in range(1, 1000):
- Мы создаём цикл, который проходит по всем натуральным числам от 1 до 999 включительно.
- n = bin(i)[2:]:
- Мы преобразуем текущее число ii в двоичную систему счисления с помощью функции
bin(). bin(i)возвращает строку, начинающуюся с ‘0b’, поэтому мы используем[2:], чтобы убрать первые два символа и получить только двоичное представление числа.
- Мы преобразуем текущее число ii в двоичную систему счисления с помощью функции
- if n.count(‘1’) % 2 == 0:
- Мы считаем количество единиц (‘1’) в двоичном представлении числа.
- Проверяем, является ли это количество чётным (остаток от деления на 2 равен 0).
- n = n + ‘0’
- Если количество единиц чётное, добавляем к двоичной строке ноль (‘0’) справа.
- n = ’10’ + n[2:]:
- Заменяем два левых разряда (первые два символа) на ’10’.
- else:
- Если количество единиц нечётное.
- n = n + ‘1’:
- Добавляем к двоичной строке единицу (‘1’) справа.
- n = ’11’ + n[2:]:
- Заменяем два левых разряда (первые два символа) на ’11’.
- r = int(n, 2):
- Преобразуем полученную модифицированную двоичную строку обратно в десятичное число с помощью
int(n, 2).
- Преобразуем полученную модифицированную двоичную строку обратно в десятичное число с помощью
- if r > 50:
- Проверяем, превышает ли полученное число rr значение 50.
- print(i)
- Если rr больше 50, выводим текущее значение ii.
- break
- Прерываем цикл, так как мы нашли первое подходящее число ii.
Этот алгоритм находит минимальное натуральное число N, которое, после обработки согласно заданным правилам, даёт результат R, превышающий 50.
Ответ: 19
