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

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

Ответ: 61

Условие

Автомат обрабатывает натуральное число N (0 ≤ N ≤ 255) по следующему алгоритму.

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

2. Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0).

3. Полученное число переводится в десятичную запись.

4. Из нового числа вычитается исходное, полученная разность выводится на экран.

Пример. Дано число N = 13. Алгоритм работает следующим образом.

1. Восьмибитная двоичная запись числа N: 00001101.

2. Все цифры заменяются на противоположные, новая запись: 11110010.

3. Десятичное значение полученного числа 242.

4. На экран выводится число 242 − 13 = 229.

Какое число нужно ввести в автомат, чтобы в результате получилось 133?

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

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

Решение

Заметим, что инверсия двоичной восьмибитной записи числа в сумме с исходным числом дает 11111111, то есть 255. (В исходном примере: 00001101 + 11110010 = 11111111.) Следовательно, если исходное число равно N, то инвертированное число равно 255 − N. Затем автомат осуществляет вычитание, вычисляя 255 − 2N.

Поэтому, чтобы найти число, которое нужно ввести в автомат для получения 133, нужно решить уравнение 255 − 2N = 133. Тем самым, искомое число равно 61.

Ответ: 61.

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

for n in range(256):

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

s = str(s)

if len(s) < 8:

s = '0' * (8 - len(s)) + s

s = s.replace('1', '*')

s = s.replace('0', '1')

s = s.replace('*', '0')

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

if r - n == 133:

print(n)

Приведём решение Виктории Фокиной на языке Python.

for n in range(256):

n2 = bin(n)[2:].zfill(8)

n2 = n2.replace('1','*')

n2 = n2.replace('0','1')

n2 = n2.replace('*','0')

r = int(n2,2)

total = r - n

if total == 133:

print(n)

Приведём решение Лилии Салимуллиной на языке Python.

for n in range(0,256):

r = bin(n)[2:]

r = 11111111 - int(r)

r = int(str(r),2)

r = r - n

if r == 133:

print(n)

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

print(*[n for n in range(256) if (n^255) - n == 133])

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

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

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