πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №5 → Задание i05-14

Задание №5 ЕГЭ Информатика с ответом и решением

Ответ: 21

Условие

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

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

2. К этой записи дописываются справа ещё два разряда по следующему правилу:

а) складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр на 2.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

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

Подсказки — как подойти к решению

  1. Вопрос обратный: найти нужно не результат, а исходное число. Перебирай N по возрастанию, считай для каждого результат и останавливайся на первом N, при котором результат превзошёл порог из условия.
  2. Следи, как формируется хвост результата: две последние цифры определяются по записи N, причём вторая — уже с учётом первой добавленной цифры, потому что сумму разрядов считают заново.

Решение

Рассмотрим числа, большие, чем 85, и найдем минимальное число, которое является результатом работы алгоритма.

8610 = 10101102 — является результатом работы алгоритма.

Следовательно, искомое число — 101012 = 2110.

Ответ: 21.

Приведём другое решение на языке Python.

def f(s):

summa = 0

for i in range(len(s)):

summa += int(s[i])

return summa

for n in range(1, 100):

s = bin(n)[2:] # перевод в двоичную систему

s = str(s)

summa = f(s)

s = s + str(summa % 2)

summa = f(s)

s = s + str(summa % 2)

r = int(s, 2) # перевод в десятичную систему

if r > 85:

print(n)

break

Приведём решение Ильи Андрианова на языке Python.

for n in range(1, 1000):

s = bin(n)[2:]

for i in range(2):

s = s + str(s.count('1') % 2)

r = int(s, 2)

if r > 85:

print(n)

break

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №5 по информатике