Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 12. Информатика. ЕГЭ. Статград. Профиль. 12.05.2025-1
- Просмотры: 1244
- Изменено: 13 мая 2025
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах \(v\) и \(w\) обозначают цепочки цифр.
А) заменить (v, w)
Эта команда заменяет в строке первое слева вхождение цепочки \(v\) на цепочку \(w\). Например, выполнение программы заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки \(v\), то выполнение команды заменить (u, v) не меняет эту строку.
Б) нашлось (v)
Эта команда проверяет, встречается ли цепочка \(v\) в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не меняется.
Дана программа для Редактора:
ПОКА НЕ нашлось (00) заменить (01, 210) заменить (02, 3201) заменить (03, 1302) КОНЕЦ ПОКА
Известно, что исходная строка начиналась с нуля и заканчивалась нулём, а между ними были только цифры «\(1\)», «\(2\)» и «\(3\)». После выполнения данной программы получилась строка, содержащая \(114\) единиц, \(215\) двоек и \(111\) троек. Сколько цифр «\(2\)» было в исходной строке?
Решение:
При проскакивании \(0\) через \(1\) получаем такое преобразование: \(01 \to 210,\) т.е. одна \(1\) даёт в итоговую строку одну \(2\) и одну \(1.\) Теперь рассмотрим проскакивание нуля через \(2{:}\) \(02 \to 3201 = 02 \to 32210.\) Т.е. одна двойка выдаёт в итоговую строку по одной \(1\) и \(3\) и две \(2.\) Наконец, проскакивание \(0\) через \(3\) приводит к преобразованию \(03 \to 1332210.\) Т.е. одна \(3\) даёт в итоговой строке две \(1,\) две \(2\) и две \(3.\) Пусть в начальной строке было \(e\) единиц, \(d\) двоек и \(t\) троек. Тогда получаем систему уравнений: $$ \begin{cases} e + d + 2t & = & 114 \\ e + 2d + 2t & = & 215 \\ d + 2t & = & 111 \end{cases} $$ Вычитая второе уравнение из первого сразу получаем, что \(d = 101.\) Можно найти и остальные числа: \(t = 5,\) \(e = 3.\) Для проверки напишем небольшую программу:
Python
s = '0' + '111' + '2' * 101 + '3' * 5 + '0'
while '00' not in s:
s = s.replace('01', '210', 1)
s = s.replace('02', '3201', 1)
s = s.replace('03', '1302', 1)
print(s.count('1'), s.count('2'), s.count('3'))
Ответ: \(101\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


