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