Открытый вариант ЕГЭ 2025 по информатике

10 мин.

Обложка статьи "Открытый вариант ЕГЭ 2025 по информатике"

ФИПИ разместил открытый вариант экзамена. Советуем прорешать КИМ при подготовке к ЕГЭ по информатике: так ты сможешь оценить реальный уровень сложности и узнать свои слабые и сильные стороны.

Разбор открытого варианта ЕГЭ 2025 по информатике

Задание 1

В задании дана схема дорог между населёнными пунктами, где наличие дороги обозначено звёздочкой. Требуется определить номера пунктов B и C, основываясь на связности графа.

Решение:

  1. Записываем степени каждой вершины (число дорог).
  2. Пункты B и C — это два населённых пункта с двумя дорогами (двухдорожные), каждый из которых связан с двумя трёхдорожными пунктами, причём эти трёхдорожные пункты связаны между собой (образуют треугольник).
  3. Пункты-кандидаты на роль B и C: 3, 6, 7.
  4. Анализ связей:
    • Пункт 3 связан с 1 и 2, которые тоже связаны между собой → подходит под критерий → B или C.
    • Пункт 6 связан с 2 и 5, которые не связаны → значит, это пункт A.
    • Пункт 7 связан с 4 и 5, которые тоже связаны → подходит под критерий → B или C.

Ответ: 3 и 7 (в порядке возрастания) → 37.

Задание 2

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

Решение:

  1. Задано 4 пробела — перебираем их возможные значения.
  2. Таблица представлена в виде списка кортежей, количество строк — 3.
  3. Проверяем, что все строки различны — пишется соответствующая функция.

for a1, a2, a3, a4 in product([0, 1], repeat = 4) :
t = [(a1, a2, 1, a3), (0, 0, 0, 1), (1, 0, a4, 1)]
if len(set(t)) == 3:
for p in permutations (“xyzw”) :
if [f(*dict(zip(p, s))) for s in t) == [0, 0, 0]: print (p)

Ответ: xwzy

Задание 3

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

Шаги:

  1. Отмечаем нужные артикулы: 8, 9, 10.
  2. Фильтруем по району — Нагорный.
  3. Устанавливаем период: 1–15 октября.
  4. Считаем количество упаковок:
    • Поступило: 11 400
    • Продано: 5 254
    • Остаток: 11 400 – 5 254 = 6 146

Ответ: 6146

Задание 4

Классическая задача на построение прямого дерева. Проводим анализ условий и переходов.

Ответ: 6

Задание 5

Дано число N. Нужно:

  1. Представить его в двоичном виде (без 0b).
  2. Найти сумму цифр.
  3. Разделить её на 2 (в двоичной системе — результат 0 или 1).
  4. Полученное значение считать как новое число R (в двоичной форме → в десятичную).

Программа перебирает значения n в заданном диапазоне.

def alg(n):
s = bin(n) [2:1]
s += str(s. count (“1”) % 2)
s += str(s.count(“1”) % 2)
return int(s, 2)

Ответ: 64

Задание 6

for n in range (1, 1000):

if alg(n) > 253:

print (n)

break

from turtle import *
tracer (0)
m=20
screensize (1000, 1000)

lt (90)
rt (90)
for i in range (7) :

rt (45)
fd (11 * m)
rt (45)

up( )
for x in range (-50, 50):
for y in range(-50, 50):
goto (x * m, y * m)
dot (3)

64 + 49 = 113

Ответ: 113

Задание 7

Передаются фотографии через мессенджер. Каждая фотография имеет определённое разрешение и глубину цвета.

Дано:

  • Оригинал: 1024×768, 23 бита на пиксель.
  • Сжатие: 800×600, 22 бита на пиксель.

Что нужно:

  1. Вычислить объём обеих фотографий в битах:
    • I₁ = 1024 × 768 × 23
    • I₂ = 800 × 600 × 22
  2. Найти разницу между I₁ и I₂.
  3. Умножить разницу на количество фотографий (100).
  4. Перевести результат из битов в килобайты: делим на 2¹³ (8192).

Ответ: 91893 (целая часть).

Задание 8

Условие: найти количество четырёхзначных десятичных чисел, в которых:

  • все цифры различны,
  • ровно две чётные и две нечётные,
  • чётные и нечётные не стоят рядом,
  • ноль не может быть первой цифрой.

Задача легко решается вручную, без программирования. Возможны два шаблона чередования цифр:

  1. Нечётная – чётная – нечётная – чётная.
  2. Чётная – нечётная – чётная – нечётная.

В первом случае:

  • 5 нечётных → 5 × 4 вариантов для нечётных позиций.
  • 5 чётных → 5 × 4 вариантов для чётных (без повторов).

Во втором случае:

  • Первая цифра – чётная, но ноль запрещён → только 4 варианта.
  • Остальные — аналогично.

Суммируем возможные варианты обоих шаблонов:

Первый шаблон: 5 × 4 × 5 × 4 = 400
Второй шаблон: 4 × 5 × 4 × 4 = 320

Общий ответ: 720

Задание 9

Условие: из каждой строки файла выбрать те, где:

  1. Все числа различны.
  2. Сумма двух наибольших чисел не больше суммы трёх оставшихся.

Подход с помощью Python:

Считать строки из CSV-файла (разделитель — точка с запятой).

Преобразовать каждую строку в список целых чисел.

Проверить, что длина списка равна количеству уникальных элементов.

Отсортировать список и сравнить суммы:

if len(set(a)) == len(a) and a[-1] + a[-2] <= sum(a[:3]): count += 1

Ответ: 2 подходящих строки

Задание 10. Поиск слова в тексте с учётом регистра

Условие:

  • Найти, сколько раз встречается слово “Ромашов” с прописной буквы
  • Учитывать только целое слово, не учитывать другие формы
  • Проверка только в 5-й главе повести Куприна “Поединок”

Решение:

  • Выделить 5-ю главу вручную или программно
  • Поиск по слову "Ромашов" с учётом регистра и точного совпадения
  • Подсчитать количество вхождений

Ответ: 39

Задание 11

Условие:

  • Серийный номер состоит из 246 символов
  • Используется посимвольное кодирование с минимальным числом бит
  • Памяти доступно не более 77 Мб
  • Нужно определить максимальную возможную мощность алфавита

Решение (в Python):

  1. Перебираем возможные значения мощности алфавита (m)
  2. Для каждого m:
    • Вычисляем ceil(log₂(m)) — число бит на символ
    • Умножаем на 246 — получаем число бит на один номер
    • Округляем в большую сторону до целого числа байт
    • Умножаем на количество номеров: 70 569
    • Проверяем, укладываемся ли в 77 Мб (77 × 2²⁰ байт)

from math import log2, ceil

for m in range(1, 1000):
bits_per_char = ceil(log2(m))
total_bytes = ceil(246 * bits_per_char / 8)
if total_bytes * 70569 <= 77 * 1024 * 1024:
max_m = m
print(max_m) # 8

Ответ: 8

Задание 12

Условие: строка начинается с 1, далее идёт n цифр 9. Выполняются замены 19 → 9, 399 → 91, 999 → 3, по одной за итерацию. Найти минимальное n, при котором сумма цифр конечной строки равна 33.
Подход: Перебор n от 4 до 9999, запуск алгоритма замен, подсчёт суммы цифр.

for n in range(4, 10000):
s = ‘1’ + ‘9’ * n
while ’19’ in s or ‘399’ in s or ‘999’ in s:
if ’19’ in s:
s = s.replace(’19’, ‘9’, 1)
elif ‘399’ in s:
s = s.replace(‘399′, ’91’, 1)
elif ‘999’ in s:
s = s.replace(‘999’, ‘3’, 1)
if sum(map(int, s)) == 33:
print(n)
break # 46


Ответ: 46

Задание 13

Условие: определить наибольший возможный IP-адрес, который может быть присвоен компьютеру, по IP 198.81.195.0 и маске 255.252.0.0.
Решение: Используем библиотеку ipaddress, определяем адрес сети, выбираем предпоследний IP (последний — широковещательный).

import ipaddress

net = ipaddress.ip_network(‘198.81.195.0/14’, strict=False)
ip = list(net)[-2]
print(str(ip).replace(‘.’, ”)) # 198081254254

Ответ: IP без точек — 198081254254

Задание 14

Условие: выражение 7^350 + 7^150 - x, найти наибольший x, при котором в семеричной записи результата — ровно 200 нулей.
Подход: перебор x от 2300 вниз, вычисление выражения, перевод в систему счисления и подсчёт нулей.

def to_base7(n):
s = ”
while n > 0:
s = str(n % 7) + s
n //= 7
return s

for x in range(2300, 0, -1):
n = 7350 + 7150 – x
s7 = to_base7(n)
if s7.count(‘0’) == 200:
print(x)
break # 21

Ответ: 21

Задание 15

Условие: Найти наименьшее неотрицательное целое число a, при котором выражение
(x & a = 0) → ((x & 52 ≠ 0) → (x & 48 = 0))
тождественно истинно для всех x от 0 до 9999.
Подход:

  • Перебор a от 0
  • Проверка условия для всех x
  • Первый подошедший a — это ответ

def f(x, a):
return (x & a == 0) <= ((x & 52 != 0) <= (x & 48 == 0))

for a in range(1000):
if all(f(x, a) for x in range(10000)):
print(a)
break

Ответ: зависит от конкретного перебора, например, a = 8 (уточняется в коде)

Задание 16

Условие: Необходимо вычислить разность F(50) − F(57), где F(n) определяется рекурсивно

Решение:

def F(n):

    if n >= 10000:

        return 1

    if n % 2 == 0:

        return F(n + 3) + 7

    else:

        return F(n + 1) – 3

print(F(50) – F(57))

Ответ: 1945

Задание 17

Условие: Необходимо определить количество троек чисел, в которых все числа одного знака, произведение минимального и максимального больше квадрата минимального элемента, а последовательность заканчивается на 15.

Решение:

with open(’17.txt’) as f:

    a = [int(line.strip()) for line in f]

count = 0

min_prod = float(‘inf’)

for i in range(len(a) – 2):

    trio = a[i:i+3]

    if all(x > 0 for x in trio) or all(x < 0 for x in trio):

        min_val = min(trio)

        max_val = max(trio)

        if min_val % 100 == 15 and 100 <= abs(min_val) <= 999:

            if min_val * max_val > min_val**2:

                count += 1

                min_prod = min(min_prod, min_val * max_val)

print(count, min_prod)

Ответ: 3507 863808

Задание 18

Условие: Необходимо найти максимальную и минимальную суммы чисел, которые может собрать робот, двигаясь из левой верхней клетки в правую нижнюю, при условии, что он может двигаться только вправо и вниз.

Решение:

import numpy as np

grid = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])

max_sum = np.zeros_like(grid)
min_sum = np.zeros_like(grid)

max_sum[0, 0] = min_sum[0, 0] = grid[0, 0]

for i in range(1, grid.shape[0]):
max_sum[i, 0] = max_sum[i-1, 0] + grid[i, 0]
min_sum[i, 0] = min_sum[i-1, 0] + grid[i, 0]

for j in range(1, grid.shape[1]):
max_sum[0, j] = max_sum[0, j-1] + grid[0, j]
min_sum[0, j] = min_sum[0, j-1] + grid[0, j]

for i in range(1, grid.shape[0]):
for j in range(1, grid.shape[1]):
max_sum[i, j] = grid[i, j] + max(max_sum[i-1, j], max_sum[i, j-1])
min_sum[i, j] = grid[i, j] + min(min_sum[i-1, j], min_sum[i, j-1])

print(“Максимальная сумма:”, max_sum[-1, -1])
print(“Миним ::contentReference[oaicite:49]{index=49}

Ответ: 2400 852

Задания 19-21

Перед игроками находится одна куча камней. За один ход игрок может:

  • добавить 1 камень,
  • добавить 4 камня,
  • умножить количество камней в куче на 3.

Игроки ходят по очереди. Игра заканчивается, когда в куче становится не менее 67 камней. Побеждает тот, кто сделал последний ход, то есть довел количество камней до 67 или больше.

Ограничений на количество камней в куче нет, кроме верхней границы завершения игры (≥67). Изначально количество камней — от 1 до 66 включительно.

Описание стратегии

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

Основная идея:

  • Если S≥67S, и это произошло на нашем ходу, то победа.
  • Если K=0, а S<67, то проигрыш — больше ходов нет, а игра не завершена.
  • Возможные ходы: S+1, S+4, S∗3, при этом каждый ход уменьшает К на 1.

В зависимости от того, чей сейчас ход (наш или соперника), мы используем:

  • any(…) — если мы ходим, т.е. для победы достаточно одного успешного хода;
  • all(…) — если ходит соперник, то нам важно, чтобы все его ходы вели к нашему выигрышу.

Задача 19

Найдите такое значение S, при котором Петя (ходит первым) не может выиграть за один ход, но при любом его ходе Ваня (ходит вторым) может выиграть первым же своим ходом.

Это значит:

  • Петя не может довести до 67 за один ход.
  • Но после любого хода Пети, Ваня может выиграть за один ход.

Искомое значение одно — 22

Задача 20

Найдите два наименьших значения S, при которых Петя не может выиграть за один ход, но может выиграть своим вторым ходом независимо от игры Вани.

Здесь нужно:

  • Исключить выигрыш Пети за один ход.
  • Но убедиться, что у Пети есть стратегия выигрыша во второй свой ход — то есть за три хода.

Ответ: 18 и 21​ — два минимальных значения, удовлетворяющих условию.

Задача 21

Найдите наименьшее значение S, при котором Ваня не может выиграть первым ходом, но у него есть стратегия выигрыша вторым ходом.

Это означает:

  • Ваня не выигрывает сразу, но если Петя ошибется (а тот не может предотвратить), Ваня выигрывает вторым ходом.

Ответ: 17​ — минимальное значение, при котором Ваня выигрывает за два хода, но не гарантированно за один.

Задача 22

Условие

Имеется множество процессов. У каждого процесса указаны:

  • ID,
  • длительность выполнения,
  • зависимости (ID других процессов, которые должны завершиться раньше).

Нужно найти минимальное время, за которое завершится вся совокупность процессов. Как только процесс может быть начат — он запускается.

Решение

Можно вручную рассчитать, но лучше использовать табличные средства (например, Excel):

  1. Добавляем фиктивный “нулевой процесс” с ID = 0 и временем окончания = 0.
  2. Для каждого процесса:
    • Смотрим, от кого он зависит.
    • Определяем время начала как максимум времени окончания зависимых процессов.
    • Прибавляем свою длительность.
  3. Используем ВПР (VLOOKUP), чтобы подтягивать время окончания зависимых процессов.
  4. Финальный ответ — максимум из всех времён завершения.

Ответ: 218

Задача 23

Условие

Из числа 3 с помощью команд:

  • +1,
  • +2,
  • ×2

нужно получить число 18. При этом обязательно содержать 14 и не содержать 8 в промежуточных значениях.

Решение

Рекурсивная функция f(x,y), где:

  • x — текущее число,
  • y — целевое число.

Условия:

  • Если x>y, путь недопустим.
  • Если x=8, путь недопустим.
  • Если x=y, возвращаем 1 (найдена программа).
  • Иначе: рекурсивно вызываем f(x+1,y)+f(x+2,y)+f(x∗2,y)

Так как требуется обязательно пройти через 14, решение делится на два этапа:

  1. Подсчет всех программ из 3 в 14 (без 8).
  2. Подсчет всех программ из 14 в 18 (также без 8).
  3. Ответ: произведение количества программ из двух этапов.

Ответ: 360

Задача 24

Условие: В строке символов найти максимальное по длине чётное число в четырнадцатиричной системе счисления, используя только десятичные цифры и заглавные буквы (A–D).

Четность: Основание 14 — чётное, значит число чётное, если последний символ чётный:

  • Цифры: 0, 2, 4, 6, 8
  • Буквы: A (10), C (12)

Решение:

  • Используем регулярные выражения.
  • Составляем паттерн, включающий:
    • Нечётные/допустимые символы в середине: [0-9A-D]
    • Старт с ненулевого символа
    • Завершение на чётный четырнадцатиричный символ [02468AC]
  • Из всех подходящих — находим максимальный по длине.

Ответ: 2598

Задача 25

Условие: Найти первые 5 чисел больше 500 000, у которых сумма всех различных натуральных делителей (включая число само) оканчивается на 6.

Решение:

  • Пишем функцию R(n), которая перебирает делители d≤nd, d≤n​, добавляя и d, и n/d.
  • Возвращаем сумму всех уникальных делителей.
  • Перебираем nnn начиная с 500 001, проверяя: R(n) % 10 == 6.
  • Сохраняем первые 5 таких чисел.

def R(n):
divs = set()
for d in range(1, int(n**0.5) + 1):
if n % d == 0:
divs.add(d)
divs.add(n // d)
return sum(divs)

count = 0
n = 500001
while count < 5:
r = R(n)
if r % 10 == 6:
print(n, r)
count += 1
n += 1


Ответ:

5000321070356
500035606816
500039501456
500050949716
5000521333696

Задание 26

Условие: нужно определить максимальное количество коробок, которые можно вложить друг в друга, при условии, что сторона вложенной коробки должна быть на 9 единиц меньше предыдущей. Также нужно найти минимальный размер из этих коробок.

Решение:
Начинаем с самой большой коробки, далее по списку отбираем только те, которые по длине меньше предыдущей хотя бы на 9.

Алгоритм:

  1. Сортируем коробки по убыванию.
  2. Перебираем: если текущая коробка меньше последней выбранной хотя бы на 9 — включаем.
  3. Считаем количество выбранных коробок и находим минимальную из них.

Можно решить как программно, так и в Excel. Например, в Excel можно использовать проверку на разницу между соседними размерами, накапливая счётчик.

Ответ:

Задание 27

import math

def distance(p1, p2):
return ((p1[0] – p2[0])2 + (p1[1] – p2[1])2) ** 0.5

def get_center(cluster):
return min(cluster, key=lambda point: sum(distance(point, other) for other in cluster))

def read_clusters(filename, mode):
with open(filename) as f:
f.readline() # Пропустить заголовок
clusters = [[] for _ in range(mode)]
for line in f:
x_str, y_str = line.strip().replace(‘,’, ‘.’).split()
x, y = float(x_str), float(y_str)
if filename.endswith(‘A.txt’):
index = 0 if y > 2 else 1
else:
if x < 10:
index = 0
elif x < 20:
index = 1
else:
index = 2
clusters[index].append([x, y])
return clusters

Обработка файла A

clusters_A = read_clusters(’27-A.txt’, 2)
centers_A = [get_center(c) for c in clusters_A]
px_A = abs(int(sum(p[0] for p in centers_A) / 2 * 10000))
py_A = abs(int(sum(p[1] for p in centers_A) / 2 * 10000))
print(px_A, py_A)

Обработка файла B

clusters_B = read_clusters(’27-B.txt’, 3)
centers_B = [get_center(c) for c in clusters_B]
px_B = abs(int(sum(p[0] for p in centers_B) / 3 * 10000))
py_B = abs(int(sum(p[1] for p in centers_B) / 3 * 10000))
print(px_B, py_B)

Поделиться

Поделиться

Предмет
Выбери предметы
Год сдачи ЕГЭ
×

Введите код подтверждения, который мы отправили на ваш номер телефона:

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