На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если сумма цифр в двоичной записи числа чётная, то к этой записи справа дописывается 0, а затем два левых разряда заменяются на 1;
б) если сумма цифр в двоичной записи числа нечётная, то к этой записи справа дописывается 1, а затем два левых разряда заменяются на 11.
Полученная таким образом запись является двоичной записью искомого числа R.
Например, для исходного числа 610 = 1102 результатом является число 1002 = 410, а для исходного числа 410 = 1002 результатом является число 11012 = 1310.
Укажите число N, после обработки которого с помощью этого алгоритма получается наибольшее значение R, меньшее 768. В ответе запишите это число в десятичной системе счисления.
Приведём решение на языке Python.
maxi = 0
otv = 0
for n in range(1000):
s = bin(n)[2:]
if s.count('1')%2 == 0:
s = '1' + s[2:] + '0'
else:
s = '11' + s[2:] + '1'
r = int(s,2)
if r < 768:
maxi = max(maxi,r)
if maxi == r:
otv = n
print(otv)
Ответ: 639.

