Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

ПОМОГИТЕ НАЙТИ ОШИБКУ В КОДЕ!!

задача:
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если количество цифр двоичной записи числа чётное, то к этой записи справа дописывается 1;
б) если количество цифр двоичной записи числа нечётное, то к этой записи слева дописывается 1, а справа дописывается 0;
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.

Например, для исходного числа 3 = 112 результатом является число 1112 = 7.

Укажите минимальное число R, большее 666, которое могло получиться в результате работы данного алгоритма.
В ответе запишите это число в десятичной системе счисления.
моя программа:
for n in range(1,1000):
n_2 = f'{n:b}'
if len(n_2) % 2 !=0:
n_2= '1'+n_2+'0'
else:
n_2= n_2+'1'
r = int(n_2,2)
if r>666:
print(r)
break

Дополнен

ответ должен быть 1025

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
5мес

Уберите break в конце, чтобы увидеть все результаты, и запустите в локальной среде.
Вы обнаружите, что они не везде идут по возрастанию.
Это значит, что первый результат не обязательно самый маленький.

Для получения верного ответа нужно собрать все результаты и вывести наименьший из них.

Аватар пользователя
Знаток
5мес

Твой код в целом правильно реализует алгоритм. Давай разберём его работу и найдём минимальное число
𝑅
R, которое больше 666.

Разбор алгоритма
Перевод числа
𝑁
N в двоичную систему.
Добавление цифр по правилу:
Если длина двоичной записи чётная, дописываем 1 справа.
Если длина нечётная, дописываем 1 слева и 0 справа.
Перевод обратно в десятичную систему и проверка условия
𝑅
>
666
R>666.
Разбор работы кода
Твой код перебирает числа от 1 до 1000, проверяя, какое минимальное
𝑅
R больше 666.

Проверим на нескольких значениях вручную:

𝑁
=
25
N=25

Двоичная запись:
1100
1
2
11001
2

(нечётная длина)
Преобразование:
1110010
1110010 →
111001
0
2
1110010
2


Десятичное значение: 114
𝑁
=
26
N=26

Двоичная запись:
1101
0
2
11010
2

(чётная длина)
Преобразование:
11010
1
2
110101
2


Десятичное значение: 53
𝑁
=
50
N=50

Двоичная запись:
11001
0
2
110010
2

(чётная длина)
Преобразование:
110010
1
2
1100101
2


Десятичное значение: 101
𝑁
=
51
N=51

Двоичная запись:
11001
1
2
110011
2

(нечётная длина)
Преобразование:
11100110
11100110 →
1110011
0
2
11100110
2


Десятичное значение: 230
𝑁
=
84
N=84

Двоичная запись:
101010
0
2
1010100
2

(чётная длина)
Преобразование:
1010100
1
2
10101001
2


Десятичное значение: 169
𝑁
=
85
N=85

Двоичная запись:
101010
1
2
1010101
2

(нечётная длина)
Преобразование:
110101010
110101010 →
11010101
0
2
110101010
2


Десятичное значение: 426
𝑁
=
171
N=171

Двоичная запись:
1010101
1
2
10101011
2

(нечётная длина)
Преобразование:
1101010110
1101010110 →
110101011
0
2
1101010110
2


Десятичное значение: 854
Таким образом, минимальное число
𝑅
R, большее 666, равно 854.

Аватар пользователя
Ученик
5мес

Вон там