Автор | Сообщение |
|
Отправлено: 05.12.21 11:46. Заголовок: Задание 5, номер 145
145) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1) Строится двоичная запись числа N. 2) К этой записи дописывается (дублируется) последняя цифра. 3) Затем справа дописывается 0, если в двоичном коде числа N чётное число единиц, и 1, если нечётное. 4) К полученному результату дописывается ещё один бит чётности так, чтобы количество единиц в двоичной записи полученного числа стало чётным. Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите минимальное число R, большее 80, которое могло получиться в результате работы автомата. В ответе это число запишите в десятичной системе. В ответе 95. Переводим в двоичную 1011111. По алгоритму это число не может быть получено, 2 единицы в конце? 1) N=1011 2) 10111 3) 101110 (число единиц четное, в конце дописываем 0) 4) 1011100 (число единиц четное, в конце дописываем 0) Ответ: 92.
|
|
|
Ответов - 2
[только новые]
|
|
|
| Администратор
|
Сообщение: 3068
|
|
Отправлено: 05.12.21 11:53. Заголовок: Svetic20 пишет: 3) З..
Svetic20 пишет: цитата: | 3) Затем справа дописывается 0, если в двоичном коде числа N чётное число единиц, и 1, если нечётное. |
|
Это не совсем бит чётности.
|
|
|
|
Отправлено: 21.11.22 05:19. Заголовок: Svetic20 пишет: Отв..
Svetic20 пишет: for n in range(1,100): # в цикле от 1 до 99 будем выполнять алгоритм s = bin(n)[2:] # Строится двоичная запись числа N ss=s+str(n%2) # К этой записи дописывается (дублируется) последняя цифра if s.count('1')%2==0: ss=ss+'0' # справа дописываем 0, если в двоичном коде числа N чётное число 1 else: ss=ss+'1' # справа дописываем 1, если в двоичном коде числа N нечётное число 1 if ss.count('1')%2==0: # если результат работы алгоритма содержит четное количество 1 ss=ss+'0' # справа дописываем 0 else: ss=ss+'1' # иначе справа дописываем 1 if int(ss,2)>80: # если десятичное значение двоичного кода больше 80 print(n,int(ss,2)) # выводим его на печать break # и прерываем цикл Ответ:95
|
|
|
|