На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение





Сообщение: 98
ссылка на сообщение  Отправлено: 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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 19 , стр: 1 2 All [только новые]







Сообщение: 99
ссылка на сообщение  Отправлено: 05.01.22 13:39. Заголовок: 5solve-145


5solve-145
 
for i in range(5,80):
kod = bin(i)[2:]
kod1 = kod + str(i%2)
if kod.count('1')%2 == 0: kod1 = kod1+'00'
else: kod1 = kod1+'11'
if int(kod1,2)>80:
print('N = ',i,'R =',int(kod1,2))
break


N = 11 R = 95

Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 10
ссылка на сообщение  Отправлено: 05.01.22 16:58. Заголовок: s11kai пишет: предл..


s11kai пишет:

 цитата:
предлагаю обсудить решение к задаче ege5 Р-13 (демо-2021)


Тоже так делаю. Но 4) пункт пропускаю, просто прибавляя в 3) пункте '0'. Последний бит всегда будет равен 0.

s11kai пишет:

 цитата:
5solve-145


Не поняла, что за задача. С условием из файла ege5 № 145 не сходится.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 102
ссылка на сообщение  Отправлено: 05.01.22 17:13. Заголовок: Винникова пишет: Не..


Винникова пишет:

 цитата:
Не поняла, что за задача. С условием из файла ege5 № 145 не сходится.



ege5 145 На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1) Строится двоичная запись числа N.
2) К этой записи дописывается (дублируется) последняя цифра.
3) Затем справа дописывается 0, если в двоичном коде числа N чётное число единиц, и 1, если нечётное.
4) К полученному результату дописывается ещё один бит чётности так, чтобы количество единиц в двоичной записи полученного числа стало чётным.
Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите минимальное число R, большее 80, которое могло получиться в результате работы автомата. В ответе это число запишите в десятичной системе.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 2
ссылка на сообщение  Отправлено: 10.01.23 19:13. Заголовок: flag=0 def r(n): ..


flag=0
def r(n):
n=bin(n)[2:]
n=n+n[-1]
if n.count('1')%2==0:
n+='0'
else:
n+='1'
if n.count('1')%2==1:
n+='1'
if n.count('1')%2==0:
flag=1
return int(n,2)
a=[]
for n in range (1000):
if r(n)>80:
a.append(r(n))
print(min(a))

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 253
ссылка на сообщение  Отправлено: 11.01.23 07:45. Заголовок: Marия пишет: flag=0..


Marия пишет:

 цитата:
flag=0
def r(n):
...
a.append(r(n))
print(min(a))


С вашего позволения, Мария, отформатирую ваш код для его понимания:
 
flag=0
def r(n):
n=bin(n)[2:]
n=n+n[-1]
if n.count('1')%2==0:
n+='0'
else:
n+='1'
if n.count('1')%2==1:
n+='1'
if n.count('1')%2==0:
flag=1
return int(n,2)
a=[]
for n in range (1000):
if r(n)>80:
a.append(r(n))
print(min(a))

Запустив программу на исполнение, получаем ответ 86 , хотя должно быть 95, если разговор о задаче 140

Кроме того, возник вопрос, для чего используется переменная flag, неужели только для того, чтобы перевести ее из состояния false в состояние true?
Удаляем три строки, выделенные красным цветом, и запустив программу, убеждаемся что ответ остался тем же, стало быть эти три строки были лишними, чуть подправим программу, примерно так:
 
for n in range(1,100): # в цикле от 1 до 99 будем выполнять алгоритм
s = bin(n)[2:] # Строится двоичная запись числа N
ss=s+str(n%2) # К этой записи дописывается (дублируется) последняя цифра
if s.count('1')%2==0:
sss=ss+'0' # справа дописываем 0, если в двоичном коде числа N чётное число 1
else:
sss=ss+'1' # справа дописываем 1, если в двоичном коде числа N нечётное число 1
if sss.count('1')%2==0: # если результат работы алгоритма содержит четное количество 1
sss=sss+'0' # справа дописываем 0
else:
sss=sss+'1' # иначе справа дописываем 1
if int(sss,2)>80: # если десятичное значение двоичного кода больше 80
print(n,int(sss,2)) # выводим его на печать
break
Ответ: 95


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 103
ссылка на сообщение  Отправлено: 05.01.22 17:14. Заголовок: Винникова пишет: То..


Винникова пишет:

 цитата:
... 4) пункт пропускаю, просто прибавляя в 3) пункте '0'. Последний бит всегда будет равен 0.


увы, последним нолик будет не всегда и далеко ходить не надо,вот, например, ege5 146:
s11kai пишет:

 цитата:
N = 17 R = 141 kod0 10001 kod 10001101



Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 11
ссылка на сообщение  Отправлено: 05.01.22 17:36. Заголовок: s11kai пишет: увы, ..


s11kai пишет:

 цитата:
увы, последним нолик будет не всегда, вот например:


Не поняла, то ли я так читала, но под № 145 я увидела условие задачи 146. Но не важно.

Вот ваш пример, как раз из задачи 146. А я про последний нолик говорила применительно к ege5 Р-13 (демо-2021).

Но, Вы молодец)) я сначала формулировку "...если в двоичном коде числа N... " мимо ушей пропустила))

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 105
ссылка на сообщение  Отправлено: 05.01.22 17:40. Заголовок: Винникова пишет: Не..


Винникова пишет:

 цитата:
Не поняла, то ли я так читала, но под № 145 я увидела условие задачи 146.


нет, это я виноват, действительно перепутал программы

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 107
ссылка на сообщение  Отправлено: 05.01.22 18:44. Заголовок: Винникова пишет: Но..


Винникова пишет:

 цитата:
Но, Вы молодец)) я сначала формулировку "...если в двоичном коде числа N... " мимо ушей пропустила))


спасибо
кое как понял, о чем это вы
из за этого если в двоичном коде числа N, почти весь вечер убил, пока не догадался сопоставлять пошагово каждую строку кода с алгоритмом...

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 104
ссылка на сообщение  Отправлено: 05.01.22 17:35. Заголовок: Винникова пишет: То..


Винникова пишет:

 цитата:
Тоже так делаю.



с удовольствием посмотрю ваш код, поделитесь ссылочкой

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 12
ссылка на сообщение  Отправлено: 05.01.22 17:44. Заголовок: s11kai пишет: с удо..


s11kai пишет:

 цитата:
с удовольствием посмотрю ваш код, поделитесь ссылочкой


5 Р-07
 
for n in range(8, 64):
a1 = bin(n)[2:]
r = a1 + str(a1.count('1') % 2) + '0'
if int(r, 2) > 43:
print(int(r, 2))
break


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 106
ссылка на сообщение  Отправлено: 05.01.22 18:15. Заголовок: Винникова пишет: 5 ..


Винникова пишет:

 цитата:
5 Р-07
  
for n in range(8, 64):
a1 = bin(n)[2:]
r = a1 + str(a1.count('1') % 2) + '0'
if int(r, 2) > 43:
print(int(r, 2))
break



Все так просто, поневоле хочется воскликнуть, "а что, так можно было!"
Жаль, что вы свой код опубликовали позже, чем я до него "дотумкался", сколько времени было бы сэкономлено мною
Да и не только мною, но и другими "жаждущими"

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 108
ссылка на сообщение  Отправлено: 06.01.22 01:41. Заголовок: s11kai пишет: Все т..


s11kai пишет:

 цитата:
Все так просто, поневоле хочется воскликнуть, "а что, так можно было!"



и все же, меня не покидает сомнение и вот почему:
получается, что вы в данной строке:

 цитата:
r = a1 + str(a1.count('1') % 2) + '0'


подменили пункт б предложенного алгоритма:
б) над этой записью производятся те же действия – справа дописывается остаток от деления суммы её цифр на 2.
на
б) к этой записи - справа дописывается 0
а это "не совсем есть хорошо", поскольку алгоритм должен выполняется исполнителем, но не изменяться или подменяться им.
Впрочем, я могу и ошибаться

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 13
ссылка на сообщение  Отправлено: 06.01.22 13:19. Заголовок: s11kai пишет: и все..


s11kai пишет:

 цитата:
и все же, меня не покидает сомнение



Так можно сделать применительно только к такому типу заданий (например, Р-07, Р-13).
Если строка была, например, 1001, то станет 10010, затем, 100100,
а если была 1011, то станет 10111, затем 101110.
Первый бит четности (пункт а) делает число четным.
В задачах 145, 146 задание другое

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 112
ссылка на сообщение  Отправлено: 06.01.22 13:25. Заголовок: Винникова пишет: В..


Винникова пишет:
[quote]` Винникова пишет:

 цитата:
Так можно сделать применительно только к такому типу заданий (например, Р-07, Р-13).
Если строка была, например, 1001, то станет 10010, затем, 100100,
а если была 1011, то станет 10111, затем 101110.
Первый бит четности (пункт а) делает число четным.
В задачах 145, 146 задание другое



Спасибо, возьму на вооружение

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 19 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 413
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет