OpenFIPI 2.0
5
5
FBF580
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописываются три последние двоичные цифры;
б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную записьи дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 1210 = 11002 результатом является число 11001002 = 10010, а для исходного числа 410 = 1002 это число 100112 = 1910.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 200.
26
for n in range(1000):
b = f'{n:b}' # двоичная запись
if n % 3 == 0: # если кратно трем
b = b + b[-3:] # дописываем три последние цифры
else:
b = b + f'{n % 3 * 3:b}' # добавляем утроенный остаток
r = int(b, 2) # переводим в десятичную
if r >= 200: # если получилось не менее 200
print(n) # вывод ответа и остановка цикла
break
c = []
for n in range(4,1000):
b = f'{n:b}'
if n%3==0:
b = b + b[-3] + b[-2] + b[-1]
else:
b = b + f'{n%3*3:b}'
r = int(b,2)
if r >= 200:
c.append(n)
print(min(c))
Просмотреть отправленные ответы FBF580