КНИГА-ТРЕНАЖЕР: «Базовая подготовка к ЕГЭ по информатике в компьютерной форме». Авторский курс. Евгений Леонидович Сидоркин
остаток от деления суммы на 2.
3. Предыдущий пункт повторяется для записи с добавленной цифрой.
4. Результат переводится в десятичную систему.
Пример. Дано число N = 13. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1101.
2. Сумма цифр двоичной записи 3, остаток от деления на 2 равен 1, новая запись 11011.
3. Сумма цифр полученной записи 4, остаток от деления на 2 равен 0, новая запись 110110.
4. Результат работы алгоритма R = 54.
При каком наименьшем числе N в результате работы алгоритма получится R> 170? В ответе запишите это число в десятичной системе счисления.
Решение: Рассмотрим первое попавшееся число, которое больше 170. 171=10101011. У этого числа отделим последние два разряда 171= 101010 | 11 не походит, т.к., выполняя второе правило, алгоритм сложит все единицы, которые стоят слева от вертикальной линии 1+1+1=3, а затем 3 разделим на 2 без остатка и получим 1 и запишем эту единица справа от числа 101010 1. Затем снова применим второе правило к получившемуся числу 101010 | 1. И получим уже новое число 101010 | 10. Получившееся число 10101010=170 по условию задачи должно быть равно 171. Понятно, что 171 не равно 170, поэтому число 171 не подходит. Берем число 172=10101100. Проверяем его на второе правило 2 раза и видим, что число 172 подходит. Осталось только число 10101100 без двух правых нулей перевести в десятичную систему счисления. Получаем 101011=43.
Ответ: 43.
Решение задачи cпособом программирования на языке Python:
for n in range (42,64):
r = list ( bin (n)[2:]) # преобразуем число сначала в двоичную систему счисления и потом переводим его список строк
for i in range(len(r)):
r[i] = int(r[i]) # преобразуем каждую строку (двоичная цифра) в целый тип данных
r += [sum(r)%2] # добавляем остаток от деления справа от числа
r += [sum(r) % 2] # добавляем остаток от деления справа от числа
for i in range(len(r)):
r[i] = str(r[i]) # обратный перевод в список строк
if int(''. join(r), 2) >170:# переводим в целочисленный тип и проверяем на условие задачи
print (n)
break
Ответ: 43.
Пример 5.2
На вход алгоритма подается натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1) Строится двоичная запись числа N.
2) К этой записи дописываются разряды по следующему правилу:
если два последних разряда одинаковые, дописывается 0, иначе дописывается 1.
3) К полученной записи дописывается еще один бит по правилу в пункте 2.
Полученная таким образом запись является двоичной записью искомого числа R.
Укажите минимальное число N, при вводе которого получится значение R больше, чем 61.
В ответе полученное число запишите в десятичной системе.
Решение:
Узнаем, какое число N может быть, чтобы в результате получилось 61.
61 = 111101 2
Убираем два младших разряда и исполняем алгоритм.
15=1111 2 -> (если два последних разряда одинаковые, то применяем первое правило) -> 111102 -> (два последних разряда разные) ->