ЕГЭ 2025 по информатике: разбор СтатГрада (24.10.2024)

Разбор заданий СтатГрада от 24 октября 2024 года, релевантных ЕГЭ по информатике 2025 года. Рассмотрим решение нескольких задач с использованием Python и Excel.

Задача 24: Максимальное количество символов в последовательности

Текстовый файл содержит цифры (от 1 до 6 знаков), операции вычитания и умножения, а также заглавные латинские буквы A, B, C, D. Необходимо определить максимальное количество символов в непрерывной последовательности, начинающейся с буквы ‘A’, за которой следует корректное арифметическое выражение с целыми неотрицательными числами в десятичной системе счисления.

Решение основано на использовании регулярных выражений в Python.

Решение:

  1. Импортируем модуль re: import re
  2. Открываем файл и читаем его содержимое в одну строку: s = open(‘file.txt’).read() (предполагается, что файл file.txt находится в той же директории).
  3. Заменим вычитание на умножение и две операции подряд на восклицательный знак: s = s.replace(‘-‘, ‘*’).replace(‘**’, ‘!’)
  4. Используем функцию re.findall() с шаблоном для поиска корректных арифметических выражений:

    pattern = r'A[d]+(?:[d]*[*][d]+)+[d]+'
    matches = re.findall(pattern, s)

    Шаблон pattern описывает последовательность:

    • A: буква ‘A’ в начале.
    • [d]+: одна или более цифр (число).
    • (?:[d]*[*][d]+)+: одна или более групп, состоящих из нуля или более цифр, знака умножения и одной или более цифр. Группа (?: … ) — не захватывающая подгруппа.
    • [d]+: одна или более цифр (число) в конце.
  5. Найдем строку с максимальным количеством символов:

    max_len = 0
    max_string = ''
    for match in matches:
        if len(match) > max_len:
            max_len = len(match)
            max_string = match
    print(max_len) # Вывод результата

Результат: 85 (для данного примера).

Задача 25: Натуральные делители

Найдите все числа в диапазоне от 110 250 000 до 110 300 000 (включительно), для которых сумма двух наибольших различных натуральных делителей (не считая самого числа и единицы) заканчивается на 102. Выведите найденные числа в порядке возрастания.

Решение:

Решение основано на переборе чисел в заданном диапазоне и нахождении их делителей.

def find_numbers(start, end):
    result = []
    for n in range(start, end + 1):
        divs = set()
        for d in range(2, int(n**0.5) + 1):
            if n % d == 0:
                divs.add(d)
                divs.add(n // d)
        if len(divs) >= 2:
            sorted_divs = sorted(list(divs), reverse=True)
            sum_divs = sorted_divs[0] + sorted_divs[1]
            if str(sum_divs).endswith('102'):
                result.append(n)
    return result

start = 110250000
end = 110300000
numbers = find_numbers(start, end)
print(*numbers)

Результат вывода: (числа, заканчивающиеся на 102, будут зависеть от диапазона и будут выведены в порядке возрастания).

Задача 26: Обработка результатов викторины в Excel

Участники викторины отвечают на 10 вопросов. За правильный ответ начисляется от 1 до p баллов, за неправильный вычитается от 1 до p баллов. Участник может не отвечать на вопрос. Для каждого участника вычисляются три показателя: сумма баллов, сумма баллов без учета неправильных ответов («Плюсы») и общее количество ответов («Ответы»). Участники сортируются по убыванию суммы баллов, затем по убыванию «Плюсов», затем по убыванию «Ответов», и, наконец, по возрастанию номера участника.

Определите ID участника, занявшего первое место среди тех, кто не прошел следующий тур (первая треть участников). Также определите количество участников с такими же тремя показателями, как у участника, занявшего 1000-е место, включая самого участника.

Решение:

Задача решается с использованием табличного процессора Excel. Необходимо:

  1. Импортировать данные в Excel.
  2. Вычислить три показателя (Сумма, Плюсы, Ответы) с помощью формул:
    • Сумма: СУММ(B2:K2) (где B2:K2 — диапазон баллов за вопросы)
    • Плюсы: СУММЕСЛИ(B2:K2;">=0")
    • Ответы: СЧЁТЕСЛИ(B2:K2;">0")
  3. Отсортировать данные по столбцам суммы, плюсов, ответов и номера участника в указанном порядке с помощью функции сортировки Excel.
  4. Определить первую треть и найти ID участника, занявшего первое место среди тех, кто не прошел в следующий тур.
  5. Используя фильтры Excel, найти количество участников с такими же тремя показателями, как у участника, занявшего 1000-е место.

Задача 27: Кластеризация точек на плоскости

В лаборатории проводится эксперимент. Результаты испытаний представляются парами чисел (координаты точек на плоскости). Проводится кластеризация точек. Центроид кластера — точка с минимальной суммой расстояний до остальных точек кластера (расстояние Евклида). Кластер с наименьшим количеством точек исключается. Затем определяются центроиды оставшихся кластеров, и вычисляется средняя точка этих центроидов. Ответ: целая часть от умножения координат средней точки на 10000.

Решение (Python):

Решение аналогично решению задачи 27 из демоверсии (функция поиска центроида опущена, предполагается ее наличие). Код ниже демонстрирует обработку данных из файлов 27a.txt и 27b.txt.

# ... (функция нахождения центроида) ...

def process_file(filename):
    # ... (чтение данных, разделение на кластеры визуально) ...
    clusters = [ [], [], [] ] # для 27a.txt
    # clusters = [ [], [], [], [], [] ] # для 27b.txt
    # ... (распределение точек по кластерам в соответствии с диаграммой) ...

    min_cluster_size = min(len(cluster) for cluster in clusters)
    clusters = [cluster for cluster in clusters if len(cluster) != min_cluster_size]

    centroids = [find_centroid(cluster) for cluster in clusters]
    avg_x = sum(centroid[0] for centroid in centroids) / len(centroids)
    avg_y = sum(centroid[1] for centroid in centroids) / len(centroids)

    print(int(avg_x * 10000), int(avg_y * 10000))


process_file('27a.txt')
process_file('27b.txt')

Результаты: (для файлов 27a.txt и 27b.txt будут свои значения)

Рассмотренные задачи демонстрируют различные подходы к решению задач по информатике на ЕГЭ, используя программирование (Python) и табличные процессоры (Excel). Важно понимать как алгоритмы решения, так и уметь применять соответствующие инструменты.

Что будем искать? Например,программа