Задание №12 ЕГЭ Информатика с ответом и решением
Ответ: 28
Условие
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (888)
ЕСЛИ нашлось (222)
ТО заменить (222, 8)
ИНАЧЕ заменить (888, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Подсказки — как подойти к решению
- Строка состоит из одинаковых цифр, поэтому удобно следить не за всей строкой, а за тем, сколько цифр в ней остаётся после каждого прохода цикла.
- Найди период работы программы: определи, за сколько проходов строка снова становится однородной, то есть состоящей из одинаковых цифр, и на сколько цифр она при этом укорачивается.
- Раздели исходное количество цифр на это сокращение, а остаток доиграй по шагам, помня, что условие цикла проверяется перед каждым проходом и цикл остановится только тогда, когда ни одной из двух цепочек в строке не останется.
Решение
Данный алгоритм сначала заменит 9 первых восьмерок на три двойки а затем заменит эти три двойки обратно на одну восьмерку. То есть за четыре повторения цикла из строки убирается 8 восьмерок. За восемь таких групп по четыре повторения, то есть за 8 · 4 = 32 повторения цикла из строки уберется 8 · 8 = 64 восьмерки, и останется 4 восьмерки. Первые три из них будут заменены на двойку.
Ответ: 28.
Приведем решение Михаила Глинского.
Для нахождения ответа используется программа на языке Питон, выполняющая заданные преобразования строки:
s='8'*68
while ('222' in s) or ('888' in s):
if ('222' in s):
s=s.replace ('222','8',1)
else:
s=s.replace ('888','2',1)
print(s)
Типичные ошибки
- Работа остановлена раньше времени: три одинаковые цифры тоже являются искомой цепочкой, и цикл обязан продолжиться.
- Пропущена замена по первой ветке условия: она проверяется перед второй, поэтому строка с тремя одинаковыми цифрами ещё не финальная.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №12 по информатике