КНИГА-ТРЕНАЖЕР: «Базовая подготовка к ЕГЭ по информатике в компьютерной форме». Авторский курс. Евгений Леонидович Сидоркин. Читать онлайн. Newlib. NEWLIB.NET

Автор: Евгений Леонидович Сидоркин
Издательство: Издательские решения
Серия:
Жанр произведения: Руководства
Год издания: 0
isbn: 9785005519047
Скачать книгу
остаток от деления суммы на 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 -> (два последних разряда разные) ->