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

задача 3464

Under: (№ 3464) (Е. Джобс) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов. 1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор: НАЧАЛО ПОКА нашлось (333) ИЛИ нашлось(111) заменить(333, 11) заменить(111, 3) КОНЕЦ ПОКА КОНЕЦ На вход приведённой ниже программе поступает строка длиной не меньшей 100, состоящая только из единиц. Какое минимальное количество единиц должно быть в исходной строке, чтобы в результате получилось максимально возможное число? x = '1' * 106 while '333' in x or '111' in x: x = x.replace('333','11') x = x.replace('111', '3') print(x) вот моя программа , если мы пишем 106 , она выдает 3131331 если пишем 107 она выдает 31313311 Правильный ответ указан 106. Хотя если мы пишем 107 число мы получим больше чем , если бы мы написали 106. Объясните что не так , пожалуйста

Ответов - 1 новых

zachto: Вы заменяете все вхождения подстроки, а нужно только первое слева. [pre2] x = '1' * 106 while '333' in x or '111' in x: x = x.replace('333', '11', 1) x = x.replace('111', '3', 1) print(x) [/pre2]



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