Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Если сумма цифр десятичной записи заданного числа нечётна, то в конец двоичной записи
3−4. Пункт 2 повторяется для вновь полученных чисел ещё два раза.
5. Результатом работы алгоритма становится десятичная запись полученного числа R.
Пример. Дано число N = 17. Алгоритм работает следующим образом:
1. Строим двоичную запись: 1710 = 100012.
2. Сумма цифр числа 17 — чётная, дописываем к двоичной
3. Сумма цифр числа 34 — нечётная, дописываем к двоичной
4. Сумма цифр числа 69 — нечётная, дописываем к двоичной
5. Результат работы алгоритма R = 139.
Определите наименьшее возможное значение R > 1028, которое может получиться в результате работы алгоритма.
Приведём решение на языке Python.
def F(x):
s = 0
while x != 0:
s += x % 10
x //= 10
return s
for n in range(10000):
r=n
k=bin(n)[2:]
for i in range(3):
if F(r) % 2 == 0:
k+='0'
r=int(k,2)
else:
k+='1'
r=int(k,2)
if r>1028:
print(r)
break
Ответ: 1035.
Приведём решение Юрия Красильникова на языке Python.
def f(n):
for i in range(3): n = n*2 + sum(map(int,str(n)))%2
return n
print(min(f(n) for n in range(1000) if f(n)>1028))
Приведем решение Лилии Салимуллиновой на языке Python.
for n in range(1,200):
r = bin(n)[2:]
r = r+str(sum(map(int,str(int(r,2))))%2)
r = r+str(sum(map(int,str(int(r,2))))%2)
r = r+str(sum(map(int,str(int(r,2))))%2)
r = int(r,2)
if r > 1028:
print(r)
break
Приведем решение Бориса Савельева на языке Python.
def F(n):
suma=0
while n>0:
suma+=n%10
n//=10
return suma
a = []
for n in range(1,5000):
s = bin(n)[2:]
s = s + str(F(int(s,2))%2)
s = s + str(F(int(s, 2)) % 2)
s = s + str(F(int(s, 2)) % 2)
if int(s,2)>1028:
a.append(int(s,2))
print(min(a))

