Задание №12 ЕГЭ Информатика с ответом и решением
Ответ: 572
Условие
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Ниже приведена программа для исполнителя Редактор.
НАЧАЛО
ПОКА нашлось (722) ИЛИ нашлось (557)
ЕСЛИ нашлось (722)
ТО заменить (722, 57)
ИНАЧЕ заменить (557, 72)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход этой программе подается строка, состоящая из 55 цифр; последняя цифра в строке — цифра 7, а остальные цифры — пятёрки. Какая строка получится в результате применения программы к этой строке? В ответе запишите полученную строку.
Подсказки — как подойти к решению
- Почти вся строка состоит из одинаковых цифр, и только одна цифра отличается — следи за ней и её окружением, а не за всей строкой.
- Определи период: за сколько проходов цикла хвост строки возвращается к прежнему виду и сколько одинаковых цифр при этом исчезает.
- Раздели количество одинаковых цифр на найденное сокращение, а остаток доиграй по шагам: помни, что замена выполняется для первого слева вхождения, а цикл заканчивается, когда ни одно из условий не истинно.
Решение
Строка содержит 54 пятерки и семерку.
По ходу работы программы строка будет меняться так: ...5557 → ...55572 → ...555722—→ ...5557
При этом за 3 итерации цикла будет убираться 2 + 2 − 1 = 3 пятёрки.
Тогда после 17 раз по 3 итерации, то есть после 51 итераций, из строки будет убрано 17 умножить на 3 = 51 пятёрка и она примет вид 5557. После чего цикл отработает ещё один раз и заменит 5557 на 572.
Ответ: 572.
Приведём другое решение на языке Python.
s = '5' * 54 + '7'
while ('722' in s) or ('557' in s):
if '722' in s:
s = s.replace('722', '57', 1)
else:
s = s.replace('557', '72', 1)
print(s)
Типичные ошибки
- Цикл остановлен слишком рано: в строке ещё есть цепочка, указанная в условии, поэтому нужно выполнить ещё один проход.
- Не доиграны последние проходы: строка такого вида не является конечной, потому что условие цикла всё ещё истинно.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №12 по информатике