Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 12. Информатика. ЕГЭ. Статград. База. 12.05.2025-1
- Просмотры: 1232
- Изменено: 13 мая 2025
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах \(v\) и \(w\) обозначают цепочки цифр.
А) заменить (v, w)
Эта команда заменяет в строке первое слева вхождение цепочки \(v\) на цепочку \(w\). Например, выполнение программы заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки \(v\), то выполнение команды заменить (u, v) не меняет эту строку.
Б) нашлось (v)
Эта команда проверяет, встречается ли цепочка \(v\) в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не меняется.
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (>5) ИЛИ нашлось (>7) ИЛИ нашлось (>2)
ЕСЛИ нашлось (>5)
ТО заменить (>5, 77>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>7)
ТО заменить (>7, 222>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 55>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем содержащая \(28\) цифр «\(2\)», \(n\) цифр «\(7\)» \((0 < n < 10000)\) и \(11\) цифр «\(5\)», расположенных в произвольном порядке. Определите наименьшее значение \(n,\) при котором сумма числовых значений цифр строки, получившихся в результате выполнения программы, больше \(1000\) и кратна \(20.\)
Решение:
Каждая цифра \(5\) даёт в итоговой строке две цифры \(7,\) в сумме \(11 \cdot 2 \cdot 7 = 154.\) Каждая цифра \(2\) даёт две пятерки и в сумме \(28 \cdot 2 \cdot 5 = 280.\) Наконец каждая семёрка выдаст в строку три двойки, а в сумме \(6n.\) Значит, сумма цифр в итоговой строке будет $$280 + 154 + 6n = 434 + 6n = 440 + (n-1) \cdot 6.$$ Так как \(440\) делится на \(20,\) то и число \(6(n-1)\) тоже должно делиться на \(20,\) или, что то же самое, \(3(n-1)\) должно делиться на \(10.\) Но \(3\) — это простое число, поэтому на \(10\) должно делиться \((n-1).\) Учитывая, что сумма всех чисел должна быть больше \(1000,\) получаем, что \(n-1 = 100\) (если \(n-1 = 90,\) то \(6(n-1) = 540,\) а \(440 + 540 < 1000\)). Поэтому \(n = 101.\)
Программное решение
Python
def trasnf(s):
while '>5' in s or '>7' in s or '>2' in s:
if '>5' in s:
s = s.replace('>5', '77>', 1)
if '>7' in s:
s = s.replace('>7', '222>', 1)
if '>2' in s:
s = s.replace('>2', '55>', 1)
return s
for n in range(1, 10_000):
s = trasnf('>' + '2' * 28 + '7' * n + '5' * 11)
d = sum(int(x) for x in s[:-1])
if d > 1000 and d % 20 == 0:
print(n)
break
Ответ: \(101\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


