Форум » Кодирование и декодирование информации » ege5 Р-13 (демо-2021). » Ответить

ege5 Р-13 (демо-2021).

s11kai: Всем добрый вечер, предлагаю обсудить решение к задаче ege5 Р-13 (демо-2021) отличающееся от программы (П.Е. Финкель, г. Тимашевск) тем, что здесь каждой строке соответствует одновременное выполнение нескольких действий. Так например, строки: 2) kod0 = bin(i)[2:] - переводит значение i в двоичный код и сохраняет его в переменной - kod0 3) kod1 = kod0 + str(kod0.count('1')%2) - подсчитывает количество «1» в двоичном коде kod0, затем формирует новый код - kod1 с добавлением к нему бита четности либо «0» либо «1» 4) kod2 = kod1 + str(kod1.count('1')%2) - подсчитывает количество «1» в двоичном коде kod1, затем формирует новый двоичный код - kod2 с добавлением к нему бита четности либо «0» либо «1» 5) Переводит двоичный код в десятичное число и сравнивает найденное значение с указанным значением в условии… 6) Выводит на печать не только итоговые значения, но и демонстрирует промежуточные значения для визуального контроля [pre2] for i in range(1,70): kod0 = bin(i)[2:] kod1 = kod0 + str(kod0.count('1')%2) kod2 = kod1 + str(kod1.count('1')%2) if int(kod2,2)>77: print('N=',i,'R=',int(kod2,2),'0 =',kod0,'1 =',kod1,'2 =',kod2) break [/pre2] N= 19 R= 78 0 = 10011 1 = 100111 2 = 1001110

Ответов - 19, стр: 1 2 All

s11kai: Вспомнил про народную мудрость про соринку в чужом глазу, по поводу сомнений насчет вашей строки: r = a1 + str(a1.count('1') % 2) + '0' а у себя, как говориться - бревна не заметил в 5solve-145 тоже изменил алгоритм: if kod.count('1')%2 == 0: kod1 = kod1+'00' else: kod1 = kod1+'11'

s11kai: s11kai пишет: а у себя, как говориться - бревна не заметил в 5solve-145 тоже изменил алгоритм: вот программа, выполняющая заданный алгоритм в условии: [pre2] for i in range(5,80): kod0 = bin(i)[2:] kod1 = kod0 + str(i%2) kod = kod1 + str(kod0.count('1')%2) if int(kod,2)%2==0:kod = kod+'0' else:kod = kod+'1' if int(kod,2)>80: print('N = ',i,'R =',int(kod,2),'kod0',kod0,'kod1',kod1,'kod',kod) break [/pre2] N = 11 R = 95 kod0 1011 kod1 10111 kod 1011111

s11kai: s11kai пишет: N = 11 R = 95 kod0 1011 kod1 10111 kod 1011111 а так, еще короче и с тем же результатом: [pre2] for i in range(5,80): kod0 = bin(i)[2:] kod1 = kod0 + str(i%2) kod = kod1 + stнr(kod0.count('1')%2) kod = kod + str(kod.count('1')%2) if int(kod,2)>80: print('N = ',i,'R =',int(kod,2),'kod0',kod0,'kod1',kod1,'kod',kod) break [/pre2] N = 11 R = 95 kod0 1011 kod1 10111 kod 1011111 видимо и правда - нет предела совершенству! ... и так работает! [pre2] for i in range(5,80): kod1 = bin(i)[2:] + str(i%2) kod = kod1 + str(bin(i)[2:].count('1')%2) kod = kod + str(kod.count('1')%2) if int(kod,2)>80: print('N = ',i,'R =',int(kod,2),'kod1',kod1,'kod',kod) break [/pre2] ... и так... [pre2] for i in range(5,80): kod = bin(i)[2:] + str(i%2) + str(bin(i)[2:].count('1')%2) kod = kod + str(kod.count('1')%2) if int(kod,2)>80: print('N = ',i,'R =',int(kod,2),'kod',kod) break [/pre2]


s11kai: ege5 146.На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1) Строится двоичная запись числа N. 2) К этой записи дописывается (дублируется) последняя цифра. 3) Затем справа дописывается 0, если в двоичном коде числа N чётное число единиц, и 1, если нечётное. 4) К полученному результату дописывается ещё один бит чётности так, чтобы количество единиц в двоичной записи полученного числа стало чётным. Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите минимальное число R, большее 130, которое могло получиться в результате работы автомата. В ответе это число запишите в десятичной системе. [pre2] for i in range(1,100): kod0 = bin(i)[2:] kod = kod0 + str(i%2) kod = kod + str(kod0.count('1')%2) kod = kod + str(kod.count('1')%2) if int(kod,2)>130: print('N = ',i,'R =',int(kod,2),'kod0',kod0,'kod',kod) break [/pre2] N = 17 R = 141 kod0 10001 kod 10001101



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