Теория:

Характеристика задания
  
1. Тип ответа: числовой.
 
2. Структура содержания задания: дана текстовая задача, нужно выполнить приведённый алгоритм.
 
3. Уровень сложности: базовый.
 
4. Примерное время выполнения: \(4\) минуты.
 
5. Количество баллов: \(1\).
 
6. Требуется специальное программное обеспечение: возможно.
 
7. Задание проверяет умение выполнять формально простой алгоритм, записанный на естественном языке, или умение создавать линейный алгоритм для формального исполнителя с ограниченным набором команд, или умение восстанавливать исходные данные линейного алгоритма по результатам его работы.
  
Пример задания
 
На вход алгоритма подаётся натуральное число \(N\). Алгоритм строит по нему новое число \(R\) следующим образом.
1. Строится двоичная запись числа \(N\).
2. Далее эта запись обрабатывается по следующему правилу:
а) если сумма цифр в двоичной записи числа чётная, то к этой записи справа дописывается \(0\), а затем два левых разряда заменяются на \(10\);
б) если сумма цифр в двоичной записи числа нечётная, то к этой записи справа дописывается \(1\), а затем два левых разряда заменяются на \(11\).
Полученная таким образом запись является двоичной записью искомого числа \(R\).
Например, для исходного числа 610=1102 результатом является число 10002=810, а для исходного числа 410=1002 результатом является число 11012=1310.
Укажи минимальное число \(N\), после обработки которого с помощью этого алгоритма получается число \(R\), которое больше \(40\).
В ответе запиши это число в десятичной системе счисления.
 
Для решения используем Python. Разберём каждую строку программы.
Будем обозначать \(N\) как начальное число, \(R\) — результат. Какое число дано — неизвестно, поэтому организуем цикл, в котором переберём несколько значений, и то число, которое удовлетворяет алгоритму, выведем на экран.
 
1.jpgОрганизуем цикл для \(100\) чисел
     2.jpgВ переменную \(s\) запишем перевод числа \(n\) в двоичную систему счисления, и так как команда \(bin\) переводит число и дописывает в начале ещё два знака \(0b\), то их включать не будем, этому соответствует запись \([2:]\), т. е. два знака не включая. Помним, что \(s\) — это строка
     3.jpgУсловие: если сумма цифр, т. е. количество единиц (\(s.count('1')\) считает, сколько единиц в строке), делится на \(2\) без остатка, то...
            4.jpgВид строки изменим: сначала запишем \(10\), потом из строки возьмём знаки без первых двух (\(s[2:]\)) и допишем \(0\)
   56.jpgИначе, если условие не выполняется, строку запишем в следующем виде: две единицы, дальше также строка без первых двух знаков, далее просто единица
   77.jpgКоманда \(int(s,2)\) переводит строку \(s\) в десятичную систему счисления, \(2\) показывает из какой. И делаем проверку: если полученное десятичное число больше \(40\)...
         8.jpgТо выводим \(n\)
         9.jpgТак как число найдено, обрываем (заканчиваем) программу
Ответ\(16\)
 
Собранная программа
 
программа.jpg
Рис. \(1\). Программа для демоверсии \(2023\) года
Источники:
Рис. 1. Программа для демоверсии 2023 года. © ЯКласс.