МС получает на вход натуральное число 1 » class=»math» src=»/images/inform/quest/quest-3261-1.svg» width=»auto»> и строит по нему новое число
следующим образом:
- Строится двоичная запись числа
.
- Подсчитывается количество нулей и единиц в полученной записи. Если их количество одинаково, в конец записи добавляется её последняя цифра. В противном случае в конец записи добавляется цифра, которая встречается реже.
- Шаг
повторяется еще два раза.
- Результат переводится в десятичную систему счисления.
При каком наибольшем исходном числе <img alt="N в результате работы алгоритма получается нечетное число, которое делится на ?
Решение 1
for i in range(1023, 1, -1):
s = bin(i)[2:] # Внизу отказ от ИВ
s += s[-1] * (s.count(’0’) == s.count(’1’)) +
’1’ * (s.count(’1’) < s.count(’0’)) + ’0’ * (s.count(’0’) < s.count(’1’))
s += s[-1] * (s.count(’0’) == s.count(’1’)) +
’1’ * (s.count(’1’) < s.count(’0’)) + ’0’ * (s.count(’0’) < s.count(’1’))
s += s[-1] * (s.count(’0’) == s.count(’1’)) +
’1’ * (s.count(’1’) < s.count(’0’)) + ’0’ * (s.count(’0’) < s.count(’1’))
if int(s, 2) % 2 != 0 and int(s, 2) % 7 == 0:
print(i)
break
Решение 2
for i in range(1023, 1, -1):
s = bin(i)[2:]
for j in range(3):
k = s.count(’1’) - s.count(’0’)
if (k < 0):
s += ’1’
elif (k > 0):
s += ’0’
else:
s += s[-1]
if int(s, 2) % 2 != 0 and int(s, 2) % 7 == 0:
print(i)
break