На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё несколько разрядов по следующему правилу:
3. а) если N чётное, то к нему справа приписывается один ноль, а слева единица и ноль;
4. б) если N нечётное, то к нему справа приписывается в двоичном виде сумма цифр его двоичной записи;
Полученная таким образом запись (в ней как минимум на один разряд больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Например, исходное число 410 = 1002 преобразуется в число 1010002 = 4010, а исходное число 1310 = 11012 преобразуется в число 1101112 = 5510.
Укажите такое число N, для которого число R является наименьшим среди чисел, превышающих 600. В ответе это число запишите в десятичной системе счисления.
Приведём решение на языке Python.
otv = c = 10**10
for n in range(20,2000):
s = bin(n)[2:]
if n%2==0:
s = '10' + s + '0'
else:
s = s + bin(s.count('1'))[2:]
r = int(s,2)
if r > 600 and c > r:
otv = n
c = r
print(otv)
Приведём другое решение на языке Python.
f = lambda n: b + bin(sum(map(int, list(b))))[2:] if (b:=bin(n)[2:]) and n%2 else '10' + b + '0'
spi = sorted([(v, n) for n in range(1, 2000) if (v:=int(f(n), 2)) > 600])
print(spi[0][1])
Ответ: 75.

