Автор | Сообщение |
|
Отправлено: 05.01.22 13:29. Заголовок: ege5 Р-13 (демо-2021).
Всем добрый вечер, предлагаю обсудить решение к задаче 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) Выводит на печать не только итоговые значения, но и демонстрирует промежуточные значения для визуального контроля 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 N= 19 R= 78 0 = 10011 1 = 100111 2 = 1001110
| |
|
Ответов - 19
, стр:
1
2
All
[только новые]
|
|
|
Отправлено: 06.01.22 04:28. Заголовок: Народная мудрость пр..
Вспомнил про народную мудрость про соринку в чужом глазу, по поводу сомнений насчет вашей строки: цитата: | r = a1 + str(a1.count('1') % 2) + '0' |
| а у себя, как говориться - бревна не заметил в 5solve-145 тоже изменил алгоритм: цитата: | if kod.count('1')%2 == 0: kod1 = kod1+'00' else: kod1 = kod1+'11' |
|
| |
|
|
Отправлено: 06.01.22 04:36. Заголовок: s11kai пишет: а у с..
s11kai пишет: цитата: | а у себя, как говориться - бревна не заметил в 5solve-145 тоже изменил алгоритм: |
| вот программа, выполняющая заданный алгоритм в условии: 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 N = 11 R = 95 kod0 1011 kod1 10111 kod 1011111
| |
|
|
Отправлено: 06.01.22 05:01. Заголовок: s11kai пишет: N = 1..
s11kai пишет: цитата: | N = 11 R = 95 kod0 1011 kod1 10111 kod 1011111 |
| а так, еще короче и с тем же результатом: 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 N = 11 R = 95 kod0 1011 kod1 10111 kod 1011111 видимо и правда - нет предела совершенству! ... и так работает! 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 ... и так... 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
| |
|
|
Отправлено: 05.01.22 16:54. Заголовок: N = 17 R = 142 kod0 ..
ege5 146.На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. 1) Строится двоичная запись числа N. 2) К этой записи дописывается (дублируется) последняя цифра. 3) Затем справа дописывается 0, если в двоичном коде числа N чётное число единиц, и 1, если нечётное. 4) К полученному результату дописывается ещё один бит чётности так, чтобы количество единиц в двоичной записи полученного числа стало чётным. Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите минимальное число R, большее 130, которое могло получиться в результате работы автомата. В ответе это число запишите в десятичной системе. 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 N = 17 R = 141 kod0 10001 kod 10001101
| |
|
Ответов - 19
, стр:
1
2
All
[только новые]
|
|
|