12.02 Исполнитель «Редактор» – строка с произвольным порядком цифр
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для Панцирь:
НАЧАЛО
ПОКА нашлось(*7) или нашлось(*8)
ЕСЛИ нашлось(*87)
ТО заменить(*87, 4*)
ИНАЧЕ ЕСЛИ нашлось(*8)
ТО заменить(*8, 0*)
КОНЕЦ ЕСЛИ
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось(*7)
ТО заменить(*7, 7*)
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой программе поступает строка, начинающаяся с символа «*», после него в строке находится 6 семерок и неизвестное количество восьмерок. Расположение цифр может быть любым. Определите наименьшее количество восьмерок, которые могли содержаться в изначальной строке, если сумма цифр строки, полученной в результате выполнения программы равна 42.
Аналитическое решение:
Программа заменяет восьмерки, за которыми находится семерка на четверки. Если же за восьмеркой находится другая восьмерка, то левая восьмерка заменяется нулем. Свободные семерки не затрагиваются действиями программы. Чтобы минимизировать количество восьмерок нужно найти макисмальное количество свободных семерок, сумма которых будет кратна 42.
Сразу же можно определить, что это 6 семерок, значит в строке может не быть восьмерок вовсе, т.е. минимальное количество восьмерок – это 0.
Программное решение:
Немного проанализируем условие, чтобы написать код.
Все одиночные воьсмерки заменяются на нули, и соответственно на сумму чисел строки они не повлияют.
Если встречается в строке 7 - оно просто уходит в левую часть записи, а не заменяется на 0 как число 8, и соответственно может повлиять на сумму цифр строки.
Если встречается в строке сочетание 87 - оно заменяется на 4.
Поскольку до этого пятерки менялись на 0, а 1 оставалось в строке как есть, можно считать, что замена 87 на 4 - это уменьшение суммы цифр записи на 3 (т.к. 7 - 4 = 3).
Соответственно, от того, сколько раз в строке встретится 87, будет зависеть то, какой по итогу будет сумма цифр в строке.
Теперь реализуем это в коде:
for i in range(7): flag = 0 for j in range(100): s = ’*’ + i * ’87’ + ’7’ * (6 - i) + ’8’ * j ans = s.count(’5’) while ’*7’ in s or ’*8’ in s: if ’*87’ in s: s = s.replace(’*87’, ’4*’, 1) elif ’*8’ in s: s = s.replace(’*8’, ’0*’, 1) if ’*7’ in s: s = s.replace(’*7’, ’7*’) s = s.replace(’*’, ’0’) s = sum(map(int, s)) if s == 42: print(ans) flag = 1 break if flag == 1: break
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!