вентилятор
Хороших каникул!

ЕГЭ по информатике 2025 - Задание 12 (Вперёд, к Победе!)



Сегодня научимся решать 12 задание из ЕГЭ по информатике 2025.


В основном 12 задание решается шаблонно с помощью Питона, но есть и задачи, в которых нужен особый подход.


Перейдём к классической задачке из ЕГЭ по информатике 2025.





Задача (Классическая)

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.


1. заменить (v, w)
2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор:


НАЧАЛО
ПОКА нашлось (2222) ИЛИ нашлось (666)
  ЕСЛИ нашлось (2222)
    ТО заменить (2222, 6)
    ИНАЧЕ заменить (666, 2)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 239 идущих подряд цифр 6? В ответе запишите полученную строку.





Решение:

Решим задачу с помощью программы на Python'е.


s = '6'*239

while ('2222' in s) or ('666' in s):
    if '2222' in s:
        s = s.replace('2222', '6', 1)
    else:
        s = s.replace('666', '2', 1)

print(s)

Здесь в начале формируется строка, состоящая из 239 шестёрок. Потом эта строка подаётся в программу. Программу переводим с русского языка на язык Питон.


Третий параметр в функции replace обозначает, что замену нужно производить один раз. Это в точности соответствует предложенной функции заменить.


Ответ получается 2266.


Ответ: 2266



Задача (Наименьшее значение n, сумма цифр)

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.


1. заменить (v, w)
2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор:


НАЧАЛО
ПОКА нашлось (25) ИЛИ нашлось (355) ИЛИ нашлось (555)
    ЕСЛИ нашлось (25)
        ТО заменить (25, 5)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (355)
        ТО заменить (355, 52)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (555)
        ТО заменить (555, 3)
    КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «2», а затем содержащая n цифр «5» (3 < n < 10000).


Определите наименьшее значение n, при котором сумма цифр в строке, получившейся в результате выполнения программы, равна 17.





Решение:

for n in range(4, 10000):

    s = '2' + '5'*n

    while '25' in s or '355' in s or '555' in s:
        if '25' in s:
            s = s.replace('25', '5', 1)
        if '355' in s:
            s = s.replace('355', '52', 1)
        if '555' in s:
            s = s.replace('555', '3', 1)

    # Найдём сумму цифр
    sm = s.count('2')*2 + s.count('3')*3 + s.count('5')*5

    if sm == 17:
        print(n)
        break

Т.к. количество пятёрок n в изначальной строке неизвестно, мы прокручиваем разные значения для этой переменной в указанном диапазоне (3 < n < 10000) с помощью цикла for.


Далее, как всегда, идёт программа, её просто переписываем с русского языка на язык Python.


После основной программы нужно найти сумму цифр. Мы используем интересный приём. Известно, что в строке могут быть только цифры: 2, 3 и 5. Других цифр просто не могло появится. Мы ищем сколько раз встречается каждая цифра в строке с помощью функции count и умножаем это количество на вес каждой цифры. Это и есть тот вклад, который каждая цифра вносит в общую сумму.


С помощью условия проверяем сумму цифр строки, чтобы она равнялось 17. Если это так, печатаем переменную n. С помощью команды break выходим из основного цикла for, как только будет найдено первое подходящее значение n.


Ответ: 29



Задача (Наименьшее значение n, количество цифр "3" равно 2)

Дана программа для исполнителя Редактор:


НАЧАЛО
ПОКА нашлось (2222) ИЛИ нашлось (666)
  ЕСЛИ нашлось (2222)
    ТО заменить (2222, 6)
    ИНАЧЕ заменить (666, 2)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «2», а затем содержащая n цифр «5» (3 < n < 10000).


Определите наименьшее значение n, при котором в строке, получившейся в результате выполнения программы, количество цифр «3» равно 2



Решение:

for n in range(4, 10000):

    s = '2' + '5'*n

    while '25' in s or '355' in s or '555' in s:
        if '25' in s:
            s = s.replace('25', '5', 1)
        if '355' in s:
            s = s.replace('355', '52', 1)
        if '555' in s:
            s = s.replace('555', '3', 1)

    # Проверим условие задачи
    if s.count('3')==2:
        print(n)
        break

Сама программа здесь такая же, как и в предыдущей задаче. Отличается лишь вопрос. Поэтому программу мы так же пишем, как и в предыдущей примере, но в конце проверяем количество троек в получившейся строке с помощью функции count.


Ответ: 18



Задача (Наименьшее значение n, останутся только цифры "5")

Дана программа для исполнителя Редактор:


НАЧАЛО
ПОКА нашлось (2222) ИЛИ нашлось (666)
  ЕСЛИ нашлось (2222)
    ТО заменить (2222, 6)
    ИНАЧЕ заменить (666, 2)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «2», а затем содержащая n цифр «5» (3 < n < 10000).


Определите наименьшее значение n, при котором в строке, получившейся в результате выполнения программы, количество цифр «3» равно 2



Решение:

for n in range(4, 10000):

    s = '2' + '5'*n

    while '25' in s or '355' in s or '555' in s:
        if '25' in s:
            s = s.replace('25', '5', 1)
        if '355' in s:
            s = s.replace('355', '52', 1)
        if '555' in s:
            s = s.replace('555', '3', 1)

    # Проверим условие задачи
    if s.count('5')>0 and s.count('2')==0 and s.count('3')==0:
        print(n)
        break

Здесь опять условие задачи такое же, как в предыдущей задаче. Но вопрос другой. Т.к. в получившейся строке могут быть только цифры "2", "3" и "5", мы проверяем, чтобы количество двоек было равно нулю, количество троек так же было равно нулю, а количество пятерок было больше нуля.


Находим наименьшее n.


Ответ: 6



Задача (Наибольшая сумма цифр)

Дана программа для исполнителя Редактор:


НАЧАЛО
ПОКА нашлось (19) ИЛИ нашлось (49) ИЛИ нашлось (999)
    ЕСЛИ нашлось (19)
      ТО заменить (19, 9)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (49)
       ТО заменить (49, 91)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (999)
       ТО заменить (999, 4)
    КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с цифры «1», а затем содержащая n цифр «9» (3 < n < 10 000).


Определите наибольшее возможное значение суммы числовых значений цифр в строке, которая может быть результатом выполнения программы.


Решение:
mx=0
for n in range(4, 10000):

    s = '1' + '9'*n

    while '19' in s or '49' in s or '999' in s:
        if '19' in s:
            s = s.replace('19', '9', 1)
        if '49' in s:
            s = s.replace('49', '91', 1)
        if '999' in s:
            s = s.replace('999', '4', 1)

    #Найдём сумму цифр
    sm = s.count('1')*1 + s.count('4')*4 + s.count('9')*9

    # Применим приём "Царь горы"
    mx = max(mx, sm)

print(mx)

Сумму цифр ищем, как предыдущих примерах. Чтобы найти максимальную сумму цифр, используем приём "Царь горы". В начале, до цикла while, завели переменную mx. Если мы ищем максимальное значение, то в начале кладём в эту переменную самое маленькое значение (принцип "наоборот"). Если бы искали самое маленькое значение, то назвали бы переменную mn, и присвоили наоборот очень большое значение 10**10.


Это делается для того, чтобы в начале легко можно было победить данное значение. То значение, которое побеждает, становится лидером (царём горы) и записывается в переменную mx. Затем, кто победит нового лидера, сам становится лидером. Таким образом, в переменной mx образуется самое большое значение.


Сравнивать текущего лидера mx и нового претендента sm нам помогает функция max(). Аналогично можно найти и минимальное значение c помощью функции min().


После запуска программа может работать несколько секунд из-за вложенных циклов.


Ответ: 23



Задача (Сумма цифр является полным квадратом)

Дана программа для исполнителя Редактор:


НАЧАЛО
ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
  ЕСЛИ нашлось (>1)
    ТО заменить (>1, 22>)
  КОНЕЦ ЕСЛИ
  ЕСЛИ нашлось (>2)
    ТО заменить (>2, 2>)
  КОНЕЦ ЕСЛИ
  ЕСЛИ нашлось (>0)
    ТО заменить (>0, 1>)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем содержащая 39 цифр «0», n цифр «1» и 39 цифр «2», расположенных в произвольном порядке.


Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является полным квадратом.


Решение:

Решим данную задачу аналитически.


Примеры чисел, которые являются полными квадратами: 9, 16, 49 и т.д.


Ноль "0" превращается в "1". Всего у нас 39 нулей. Значит, в итоговой сумме будет точно минимум 39. Двойка "2" превращается так же в двойку "2". Изначально было 39 двоек, поэтому в итоговую сумму добавляется 39*2 = 78. Единица превращается в две двойки "22", т.е. в сумме в 4. Напишем, что нам уже известно:


39 + 78 + 4*n = 117 + 4*n

Ближе всего данная сумма к числу 112=121. Можно ли подобрать какое-нибудь число n, чтобы в сумме получилось 121? Да! При n=1.


Значит, наименьшее значение n равно 1.


Ответ: 1



Задача (Сумма цифр является простым числом)

Дана программа для Редактора:

НАЧАЛО
ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
  ЕСЛИ нашлось (>1)
    ТО заменить (>1, 22>)
  КОНЕЦ ЕСЛИ
  ЕСЛИ нашлось (>2)
    ТО заменить (>2, 2>)
  КОНЕЦ ЕСЛИ
  ЕСЛИ нашлось (>0)
    ТО заменить (>0, 1>)
  КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем содержащая 39 цифр «0», n цифр «1» и 39 цифр «2», расположенных в произвольном порядке.


Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.


Решение:

Простые числа - это такие числа, которые имеют ровно 2 делителя: единицу и само это число.


Напишем программу, которая будет печатать простые числа в диапазоне, к примеру, от 2 до 200.


def Pr(n):
    for i in range(2, int(n**0.5)+1):
        if n%i==0:
            return False
    return True


for i in range(2, 200):
    if Pr(i):
        print(i)




Здесь функция Pr(n) проверяет, является ли число n простым числом. Если да, возвращает True, иначе False.


В функции мы пробегаем от 2 до корня числа n. Если в этом диапазоне мы не встретили ни одного делителя, то число можно признать простым. Почему достаточно проверить диапазон до корня числа n, читайте в статье по 25 Заданию ЕГЭ по информатике.


Затем мы используем эту функцию в цикле for, чтобы найти первые простые числа.


ЕГЭ по информатике - Задание 12 (простые числа)

Теперь проведём действия, аналогично предыдущей задаче. Получим сумму цифр:


39*1 + 2*39 + n*4 = 117 + n*4

Пробуем подобрать ближайшие числа. Если нужно, можно написать программу.


127 - 117 = 10 (Не делится на 4)
131 - 117 = 14 (Не делится на 4)
137 - 117 = 20 (Делится на 4)

Чтобы получить 137 в итоговой сумме, число n должно равняться 20:4 = 5.


Ответ: 5



Дополнительные задачи


В следующей типовой задаче из ЕГЭ по информатике 2025 нужно сообразить один момент.


Задача (Нужно сообразить)

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.


1. заменить (v, w)
2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:


НАЧАЛО
  ПОКА нашлось (21) ИЛИ нашлось (31) ИЛИ нашлось (23)
    ЕСЛИ нашлось (21)
      ТО заменить (21, 12)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (31)
      ТО заменить (31, 13)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (23)
      ТО заменить (23, 32)
    КОНЕЦ ЕСЛИ
  КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой ниже программе поступает строка, содержащая 50 цифр 1, 50 цифр 2 и 50 цифр 3, расположенных в произвольном порядке. Запишите без разделителей символы, которые имеют порядковые номера 10, 90 и 130 в получившейся строке.





Решение:

Здесь сказали, что начальный порядок цифр в строке неизвестен. А просят написать конкретные данные на выходе. Отсюда делаем вывод, что любой порядок в начале приводит к одному и тому же результату.


В строке заведём цифры по порядку: в начале единицы, потом двойки, потом тройки.


s = '1'*50 + '2'*50 + '3'*50

while ('21' in s) or ('31' in s) or ('23' in s):
    if '21' in s:
        s = s.replace('21', '12', 1)
    if '31' in s:
        s = s.replace('31', '13', 1)
    if '23' in s:
        s = s.replace('23', '32', 1)

print(s[9] + s[89] + s[129])

Чтобы обратится к конкретному символу в строке, используем конструкцию s[позиция символа]. Но нумерация начинается с нуля.


В ответе запишем 132.


Ответ: 132



В следующей примерной задаче из ЕГЭ по информатике 2025 опять используем Питон.


Задача (Снова программируем)

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.



1. заменить (v, w)
2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор:


НАЧАЛО
ПОКА нашлось (111)
  заменить (111, 22)
  заменить (222, 11)
КОНЕЦ ПОКА
КОНЕЦ

Известно, что исходная строка содержала более 70 единиц и не содержала других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая максимально возможное количество единиц.





Решение:

Здесь мы попробуем с помощью программы формировать строчки с разной длиной и смотреть, какое количество единиц получится на выходе.


for i in range(71, 1000):
    s = '1'*i
    while '111' in s:
        s = s.replace('111', '22', 1)
        s = s.replace('222', '11', 1)

    print(i, s.count('1'))

Посмотрев результаты, понимаем, что максимальное количество единиц в окончательной строке равно 4. Так же максимальное количесвто единиц можно найти с помощью приёма "Царь горы". А минимальное количество единиц в изначальной строке, чтобы получилось в итоге 4 единицы, равно 73.


Ответ: 73



Задача (Трудно запрограммировать)

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.


1. заменить (v, w)
2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:


НАЧАЛО
  ПОКА нашлось (11)
    ЕСЛИ нашлось(112)
      ТО заменить (112, 5)
      ИНАЧЕ заменить (11, 3)
  КОНЕЦ ПОКА
КОНЕЦ

Исходная строка содержит 23 единицы и 5 двоек, других цифр нет, точный порядок расположения цифр неизвестен. Какую наибольшую сумму цифр может иметь строка, которая получится после выполнения программы?





Решение:

Здесь не важно, по какой ветке будет идти программа, прирост в сумме цифр будет всегда равен 1. Поэтому можно расположить в начале только 1, а затем все двойки в исходной строке.


Одиннадцать раз символы '11' превратятся в '3'. Тогда 11 * 3 = 33. Останутся цифры '122222'. Их сумма равна 11.


В ответе получается 33 + 11 = 44.


Ответ: 44



Задача (Крепкий орешек)

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.


1. заменить (v, w)
2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:


НАЧАЛО
  ПОКА нашлось (01) или нашлось (02)
    заменить (01, 2202)
    заменить (02, 10)
  КОНЕЦ ПОКА
КОНЕЦ

Известно, что начальная строка начиналась с нуля, а далее содержала только единицы и двойки. После выполнения данной программы получилась строка, содержащая 40 единиц и 64 двойки. Сколько двоек было в исходной строке ?


Решение:

Посмотрим, во что превращается 1:


01 -> 2202 -> 2210

Посмотрим, во что превращается 2:


02 -> 10

Обозначим за x первоначальное количество единиц в исходной строке. Обозначим за y первоначальное количество двоек в исходной строке.


Видим, что одна единица "порождает" две двойки и одну единицу, а двойка одну единицу. Составим систему уравнений.


{ x + y = 40 2 x = 64

Первое уравнение отвечает за единицы, второе уравнение за двойки.


Решив данную систему, получаем, что x=32, а y=8.


Получается количество двоек равно восьми.


Ответ: 8



12 Задание из ЕГЭ по информатике 2025 выглядит обычно объёмным, но на деле, описываются обычные конструкции (циклы и условия), которые есть в большинстве языках программирования.


Задача (Чертёжник)

Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнить команду сместиться на(a, b), где a, b - целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x + a, y + b).


Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на(2, -3) переместит Чертёжника в точку (6, -1).


Цикл
ПОВТОРИ число РАЗ
последовательность команд
КОНЕЦ ПОВТОРИ

означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным).


Чертёжнику был дан для исполнения следующий алгоритм (число повторений и величины смещения в первой из повторяемых команд неизвестны):

НАЧАЛО
сместиться на(8, -60)
  ПОВТОРИ ... РАЗ
    сместиться на(..., ...)
    сместиться на(4, -6)
  КОНЕЦ ПОВТОРИ
сместиться на(-35, -3)
КОНЕЦ

В результате выполнения этого алгоритма Чертёжник возвращается в исходную точку. Какое наибольшие число повторений могло быть указано в конструкции "ПОВТОРИ ... РАЗ" ?





Решение:

Эта задача похоже на задачу Кузнечик, которую рассматривали в 5 задании.


Напишем для переменной x уравнение.


8 + n * x + n * 4 - 35 = 0

Всё выражение приравниваем к нулю, т.к. Чертёжник возвращается в исходную точку, т.е. как ни ходил Чертёжник, он никуда в итоге не сдвинулся.


n - положительное целое число, количество повторений.


x - целое число, смещение по координате x.



n * x + n * 4 = 27

n * ( x + 4 ) = 27

Нужно подобрать x и n, чтобы равенство было верным.


Число n может быть 27, 9, 3, 1. Нам нужно выбрать число n, как можно больше.


Проверим число 27! Тогда выражение x + 4 = 1 => x = -3. Теперь нужно проверить это число для координаты y.


-60 + n * y - n * 6 - 3 = 0

27 * y - 27 * 6 = 63

27 * ( y - 6 ) = 63

Видим, что нельзя подобрать такое целое число для 27, чтобы при умножении получалось 63.


Проверим число 9! Тогда выражение x + 4 = 3 => x = -1. Теперь нужно проверить это число для координаты y.


-60 + n * y - n * 6 - 3 = 0

9 * y - 9 * 6 = 63

9 * ( y - 6 ) = 63

Видим, что можно подобрать такое целое число для 9, чтобы при умножении получалось 63. Это число 7. Значит, y - 6 = 7 => y = 13


Мы подобрали все нужные числа и нашли наибольшее число n=9.


Ответ: 9



Счастливых экзаменов по информатике!








19-11-2021 в 09:06:18






Поддержать сайт:


Похожая статья:

ЕГЭ по информатике - Задание 2 (Мощнейший метод)

Сегодня разберём, как решать второе задание из ЕГЭ по информатике 202...

Категория: Информатика  Подкатегория: ЕГЭ
Дата: 03-05-2020 в 11:26:53 11


Комментарии:

почему 5-ую задачу сложно запрограммировать? тут ведь тоже произвольный порядок я пробовал в программе ставить сначала единицы, а потом двойки и наоборот - сначала двойки а потом единицы печатаю s и суммирую цифры получается везде 44
тектс 22-12-2021 в 08:30:55

Если бы сама программа была немного другая, то могло и не получится. Т.е. тут нужно самостоятельно провести анализ, при каком расположении цифр сумма будет максимальной.
Калужский Александр 22-12-2021 в 08:42:07

хорошо, спасибо
тектс 22-12-2021 в 09:20:21

Обожаю ваш сайт! Спасибо за пояснение усложненных задач.
Миса 09-06-2022 в 09:08:44



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:




Нажимая кнопку Отправить, Вы соглашаетесь с политикой конфиденциальности сайта.