Форум » Выполнение и анализ алгоритмов для исполнителей » Задание 5, номер 145 » Ответить

Задание 5, номер 145

Svetic20: 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

Поляков: Svetic20 пишет: 3) Затем справа дописывается 0, если в двоичном коде числа N чётное число единиц, и 1, если нечётное. Это не совсем бит чётности.

s11kai: Svetic20 пишет: Ответ: 92. [pre2] 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 # и прерываем цикл [/pre2] Ответ:95



полная версия страницы