Задание 12. Информатика. ЕГЭ. Шастин. 9.2.2025
- Просмотры: 420
- Изменено: 10 февраля 2025
(Л. Шастин) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах \(v\) и \(w\) обозначают цепочки цифр.
А) заменить (v, w)
Эта команда заменяет в строке первое слева вхождение цепочки \(v\) на цепочку \(w\). Например, выполнение программы заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки \(v\), то выполнение команды заменить (u, v) не меняет эту строку.
Б) нашлось (v)
Эта команда проверяет, встречается ли цепочка \(v\) в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не меняется.
Дана программа для редактора:
НАЧАЛО ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0) ЕСЛИ нашлось (>1) ТО заменить (>1, 22>) КОНЕЦ ЕСЛИ ЕСЛИ нашлось (>2) ТО заменить (>2, 2>) КОНЕЦ ЕСЛИ ЕСЛИ нашлось (>0) ТО заменить (>0, 1>) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ
На вход приведённой выше программе поступает строка, начинающаяся с символа «\(Ю\)», а затем содержащая \(19\) цифр «\(0\)», \(n\) цифр «\(1\)» (\(6 < n < 100\)) и \(19\) цифр «\(2\)». Определите наименьшее значение \(n\), при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, оканчивается на две одинаковые цифры.
Решение:
Легко заметить, что результат выполнения программы не зависит от взаимного расположения цифр в строке.
Python
for n in range(7, 100):
s = '>' + '0' * 19 + '1' * n + '2' * 19
while any(ch in s for ch in ('>1', '>2', '>0')):
if '>1' in s:
s = s.replace('>1', '22>', 1)
if '>2' in s:
s = s.replace('>2', '2>', 1)
if '>0' in s:
s = s.replace('>0', '1>', 1)
dsum = str(s.count('1') + 2 * s.count('2'))
if dsum[-2] == dsum[-1]:
print(n)
break
Ответ: \(19\)