На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:
а) складываются все цифры двоичной записи, и остаток от деления суммы
б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите минимальное число R, которое
Если в числе было нечётное количество единиц, то в конец допишется 10. Если количество единиц чётное, то допишется 00. Рассмотрим числа,
4410 = 1011002 — не может являться результатом работы алгоритма;
4510 = 1011012 — не может являться результатом работы алгоритма;
4610 = 1011102 — может являться результатом работы алгоритма, количество единиц (кроме последних двух разрядов) нечетное, и в последних двух разрядах 10.
Ответ: 46.
Приведём другое решение на языке Python.
def f(s):
summa = 0
for i in range(len(s)):
summa += int(s[i])
return summa
for n in range(1, 100):
s = bin(n)[2:] # перевод в двоичную систему
s = str(s)
summa = f(s)
s = s + str(summa % 2)
summa = f(s)
s = s + str(summa % 2)
r = int(s, 2) # перевод в десятичную систему
if r > 43:
print(r)
break
Приведём решение Демида Мишукова на языке Python.
for n in range (1,100):
s = bin(n)[2:]
if s.count('1') % 2 == 0:
s += '00'
else:
s += '10'
r = int(s,2)
if r>43:
print(r)
break
Приведём решение Михаила Глинского на языке Python.
for N in range(100):
s = bin(N)[2:]
k = s.count('1')
s = s + str(k % 2)
k = s.count('1')
s = s + str(k % 2)
R = int(s,2)
if R > 43:
print(R)
break
Приведём решение Матвея Ахтямова на языке Python.
r = []
for n in range(1,1000):
s = bin(n)[2:]
a = s + (str(sum([int(i) for i in str(s)])%2))
b = a + (str(sum([int(i2) for i2 in str(a)])%2))
if int(b,2) > 43:
r.append(int(b,2))
print(min(r))

