Алгоритм получает на вход натуральное число 1 » class=»math» src=»/images/inform/quest/quest-3255-1.svg» width=»auto»> и строит по нему новое число
следующим образом:
- Строится двоичная запись числа
.
- В этой записи последний встречаемый ноль заменяется на первые две цифры полученной записи. Если нуля нет в записи числа, алгоритм аварийно завершается.
- Запись записывается справа налево (в обратную сторону).
- Результат переводится в десятичную систему счисления.
Для скольких значений в результате работы алгоритма получится число
?
Решение 1
ans = 0
for i in range(2, 10000):
s = bin(i)[2:]
if s.count(’0’) > 0:
ind = ’’
for j in range(len(s) - 1, -1, -1):
if s[j] == ’0’:
ind = j
break
x = s[:ind] + s[0] + s[1] + s[ind + 1:]
x = x[::-1]
if int(x, 2) == 255:
ans += 1
print(ans)
Решение 2
ans = 0
for i in range(2, 10000):
s = bin(i)[2:]
if s.count(’0’) > 0:
s = s[::-1].replace(’0’, s[0:2][::-1], 1)
if int(s, 2) == 255:
ans += 1
print(ans)
Ответ: 5