Задание 12 ЕГЭ по информатике: решайте с автопроверкой
В задании 12 исполнитель Редактор меняет строку командами «заменить(v, w)» и «нашлось(v)» внутри цикла «ПОКА». Нужно узнать, какая строка получится в конце, или подобрать исходную строку под условие.
Решать задачи номераКак решать программой
Программа повторяет алгоритм Редактора почти дословно. «нашлось(v)» в Python — это v in s, а «заменить(v, w)» — это s = s.replace(v, w, 1): третий аргумент 1 заменяет только первое вхождение, как в задании.
Ветки «ЕСЛИ … ИНАЧЕ ЕСЛИ» переносятся в if и elif. Порядок веток важен: выполняется первая подходящая.
Если нужно подобрать исходную строку, например наименьшее число пятёрок, при котором результат имеет нужный вид, оберните моделирование в цикл по вариантам исходной строки. Перед перебором проверьте моделирование на примере из условия.
Строку из условия вида «сто единиц и пятьдесят двоек» соберите умножением строк, а не вручную: так не ошибётесь в количестве символов.
Разбор примера
Пока в строке есть 12, 13 или 23, Редактор делает одну замену по порядку веток: 12 на 2, иначе 13 на 31, иначе 23 на 3. Какой станет строка 1213?
s = '1213'
while '12' in s or '13' in s or '23' in s:
if '12' in s:
s = s.replace('12', '2', 1)
elif '13' in s:
s = s.replace('13', '31', 1)
else:
s = s.replace('23', '3', 1)
print(s)Программа печатает
31
Строка меняется так: 1213, затем 213 (первая замена 12 на 2), затем 231 (замена 13 на 31), затем 31 (замена 23 на 3). В строке 31 нет ни 12, ни 13, ни 23, и цикл останавливается.
Решить эту задачуЗадачи к заданию 12
- Редактор: итоговая строкаСредняяРешать
- Редактор: тройки и единицыСредняяРешать
- Редактор со стрелкойСредняяРешать
- Редактор: наименьшее число пятёрокСредняяРешать
- Машина Тьюринга на троичной лентеСредняяРешать
- Редактор: бегущий нольСредняяРешать
- Редактор: семёрки и тройкиСредняяРешать
- Редактор на буквах A, B, CСредняяРешать
Бесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).
Вопросы и ответы
- Почему replace без третьего аргумента даёт другой ответ?
- Без него Python заменяет все вхождения сразу, а Редактор заменяет только первое слева.
- Может ли программа зациклиться?
- Может, если замена не укорачивает строку и не двигает символы к концу. В задачах экзамена алгоритм всегда завершается, но при ошибке в программе цикл станет бесконечным.
- Как строить исходную строку из пятёрок и двоек?
- Умножением строк: "5" * k + "2" * m. Перебирайте k и m во вложенных циклах.