Автор | Сообщение |
|
Отправлено: 21.11.23 13:36. Заголовок: 5993 ЕГЭ 12
Добрый день! Помогите, пожалуйста разобраться. ЕГЭ 12 №321 На вход приведённой выше программе поступает строка, начинающаяся с символов «>2», затем n пар цифр «12» и в конце символ «<». Определите наименьшее значение n, при котором сумма цифр строки, получившейся в результате выполнения программы, будет больше, чем 103. for n in range(1,50): s='>2'+'12'* n+'<' while '>2<' not in s: s=s.replace('>1','>2',1) s=s.replace('12<','1<2',1) s=s.replace('>21','1>',1) s=s.replace('1<','<2',1) s=s.replace('>','',1) s=s.replace('<','',1) if sum(int(x) for x in s)>103: print(n)» Программа зацикливается при n=1/ Прокрутила вручную- так же, работает только с четными числами. Как объяснить детям, что нужны только честные числа? Поставил шаг и ответ правильный
|
 |

|
Ответов - 3
[только новые]
|
|
|
Отправлено: 05.12.23 20:37. Заголовок: Можно отследить, про..
Можно отследить, происходит ли изменение строки, если нет, до выходить из цикла по причине зависания... for n in range(1,100): s='>2'+'12'* n+'<' s1='' while s1!=s and '>2<' not in s: s1=s s=s.replace('>1','>2',1) s=s.replace('12<','1<2',1) s=s.replace('>21','1>',1) s=s.replace('1<','<2',1) s=s.replace('>','',1) s=s.replace('<','',1) if sum(int(x) for x in s)>103: print(n) break
|
 |

|
|
Отправлено: 21.02.25 19:38. Заголовок: Лучше поздно, чем никогда
Я считаю, что в текст задачи вкралась нечаянная ошибка. Если изменить последовательность замен, то задача решается без проблем. Предлагая автору/модератору исправить условие на следующий вариант: Дана программа для исполнителя Редактор: НАЧАЛО ПОКА НЕ нашлось (>2<) заменить (>1 , >2) заменить (>21 , 1>) //эта строка переставлена на новое место! заменить (12< , 1<2) заменить (1< , <2) КОНЕЦ ПОКА КОНЕЦ
|
 |

|
|
| Администратор
|
Сообщение: 4141
|
|
Отправлено: 25.02.25 17:11. Заголовок: Эта задача содержит ..
Эта задача содержит "закладку" от прямого перебора. Хотя ее тоже можно обойти: for n in range(1,1000): s = '>2' + '12'*n + '<' while '>2<' not in s: s0 = s s = s.replace('>1', '>2', 1) s = s.replace('12<', '1<2', 1 ) s = s.replace('>21', '1>', 1) s = s.replace('1<', '<2', 1) if s0 == s: break if '>2<' in s: sumDigits = sum( map(int, (c for c in s if c in '12') ) ) if sumDigits > 103: print( n, s ) break
|
 |

|
|