ЕГЭ · Информатикаподготовка по заданиям
Задание 17 из 27Алгоритмы

Алгоритмы и программирование · 1 балл

Обработка последовательности

Массивы и файлы

Найти характеристики последовательности: сумму, минимум, максимум, количество по условию.

Алгоритмы два целых числа

Что проверяет

Массивы и последовательности чисел: обобщённые характеристики, линейный поиск, сортировка.

Основание: проект спецификации и кодификатора КИМ 2027. Открыть документы

Теория

Что нужно знать

Задание 17 проверяет обработку последовательности чисел из файла: нужно найти количество подходящих пар, троек или окон и второй агрегат — максимум, минимум, сумму или среднее. В базе Kompege по теме 984 задачи, 66 решений (63 программных и 3 текстовых) и 232 видеоразбора (144 YouTube, 53 VK, 35 Rutube). В 2027 году тема сохраняется без изменения номера.

Минимум для задания 17

  • чтение чисел из файла и длина последовательности
  • окна: пары, тройки, четвёрки и пятёрки подряд
  • опорное значение: максимум или минимум с условием
  • условия «ровно k», «хотя бы один» и «только один»
  • делимость, остатки и отрицательные числа
  • последние цифры, количество цифр, сумма и произведение цифр
  • простые числа, полные квадраты и палиндромы
  • запись числа в системе счисления p
  • пары на расстоянии и элементы «через один»
  • кольцевая и симметричная последовательность
  • пары различных элементов i < j
  • агрегаты: количество, максимум, минимум, сумма и среднее
  • начальные значения и пустой список результатов
  • проверка на маленьком примере
  • порядок вывода двух чисел

Файл и данные

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

  • a = [int(x) for x in open('17.txt')] читает все строки файла.
  • strip() нужен, если в файле есть пустые строки или пробелы: int(x.strip()).
  • Если числа могут быть в одной строке: a = list(map(int, open('17.txt').read().split())).
  • len(a) — количество чисел; допустимые индексы от 0 до len(a) − 1.
  • Файл можно не закрывать в короткой программе, но с with open(...) as f надёжнее.
  • Храните весь список: опорное значение может стоять в конце файла.
a = [int(x) for x in open('17.txt')]n = len(a)

Каркас решения

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

  • Шаг 1: прочитать последовательность.
  • Шаг 2: найти максимум, минимум, среднее или количество по всему файлу.
  • Шаг 3: пройти окна нужной длины.
  • Шаг 4: проверить все условия задачи и добавить сумму окна в список.
  • Шаг 5: вывести len(b) и max(b), min(b), sum(b) или среднее.
  • Если подходящих окон нет, max упадёт — проверьте, что ответ существует.
b = [] — суммы подходящих оконprint(len(b), max(b))

Окна фиксированной длины

Пара — два подряд идущих элемента, тройка — три, четвёрка — четыре. Окно длины k задаётся начальным индексом i и занимает элементы a[i]…a[i+k−1]. Число окон равно n−k+1, а не n−k: последнее окно заканчивается на последнем элементе.

  • Пара: a[i], a[i+1], цикл range(n-1).
  • Тройка: a[i:i+3], цикл range(n-2).
  • Окно длины k: range(n-k+1), последний начальный индекс n-k.
  • zip(a, a[1:], a[2:]) — короткий способ идти по тройкам.
  • Для пар «через один» берите a[i] и a[i+2].
  • Для четвёрок и пятёрок срез a[i:i+k] короче и понятнее.
окон = n − k + 1for i in range(n - k + 1): w = a[i:i+k]

Опорное число

Во многих условиях есть «максимальный элемент, оканчивающийся на 13» или «минимальный двузначный, кратный сумме цифр». Такое число ищут один раз по всему файлу до основного цикла. Внутри цикла его уже не пересчитывают.

  • M = max(x for x in a if 10 <= x <= 99 and x % 10 == 3).
  • Для отрицательных чисел используйте abs(x) в условиях на цифры.
  • Гарантия «такой элемент есть» позволяет не обрабатывать пустой генератор.
  • При равенстве максимумов значение всё равно одно и то же.
  • Если условие сложное, оформите его функцией-предикатом.
  • Опорное число может быть характеристикой всего файла, а не окна.
M = max(x for x in a if P(x))m = min(x for x in a if Q(x))

Ровно, хотя бы, только один

В Python True — это 1, а False — 0. Поэтому число выполненных условий считают суммой логических выражений. Это самый короткий способ реализовать «ровно два из трёх», «хотя бы один» и «только один».

  • «Ровно k»: sum(cond(x) for x in w) == k.
  • «Хотя бы один»: any(cond(x) for x in w) или sum(...) >= 1.
  • «Ни один»: not any(...).
  • «Все»: all(cond(x) for x in w).
  • «Только один» для двух элементов: cond(x) ^ cond(y), исключающее ИЛИ.
  • Для двух разных условий: (P and not Q) or (Q and not P).
sum(bool) == kany(...), all(...), ^

Цифры числа

Свойства цифр проще всего проверять через строку str(abs(x)). Модуль убирает минус, иначе он попадёт в строку и испортит длину и сумму цифр.

  • Количество цифр: len(str(abs(x))).
  • Последняя цифра: abs(x) % 10, две последние: abs(x) % 100.
  • Сумма цифр: sum(map(int, str(abs(x)))).
  • Произведение цифр: цикл или prod из math.
  • Первая цифра: str(abs(x))[0].
  • Палиндром: s == s[::-1].
  • Цифра в середине трёхзначного числа: str(abs(x))[1].
  • Порядок цифр: сравните список цифр с sorted(...).
digits = str(abs(x))sum(map(int, digits))

Делимость и остатки

Делимость проверяют остатком %: число делится на d, если x % d == 0. Для отрицательных чисел в Python остаток неотрицательный, поэтому −14 % 7 == 0, а −3 % 10 == 7. Если важна именно последняя цифра, берите модуль.

  • x % d == 0 — делится на d.
  • abs(x) % 10 == 3 — оканчивается на 3, в том числе для отрицательных.
  • x % 2 == 0 — чётное; x % 2 == 1 — нечётное.
  • Сумма делится на d: (x + y) % d == 0.
  • Произведение делится на d: (x * y) % d == 0.
  • Разность кратна d: (x - y) % d == 0.
  • Остаток от деления на 1000 — последние три цифры.
  • Для кратности произведению проверяйте произведение целиком.
x % d == 0abs(x) % 100 == 13

Простые, квадраты, НОД

Проверка простоты — цикл до корня. Полный квадрат надёжнее проверять через isqrt, а не через x ** 0.5: плавающая точка даёт ошибки на больших числах. НОД и НОК берут из модуля math.

  • Простое: n >= 2 и нет делителей от 2 до isqrt(n).
  • Полный квадрат: r = isqrt(x); r*r == x при x >= 0.
  • НОД: gcd(x, y), НОК: x // gcd(x, y) * y.
  • Взаимная простота: gcd(x, y) == 1.
  • Количество делителей считают перебором до корня.
  • math.prod удобен для произведения цифр или элементов окна.
all(n % d for d in range(2, isqrt(n) + 1))gcd(x, y), x*y // gcd(x, y)

Системы счисления

В задании 17 часто встречаются условия про запись в семеричной, восьмеричной или шестнадцатеричной системе. Последняя цифра в системе p — это x % p, а старшую цифру находят делением на p, пока число не станет меньше p.

  • bin(x), oct(x), hex(x) дают строку с префиксом.
  • Последняя цифра в base p: x % p для неотрицательных чисел.
  • Старшая цифра: повторяйте x //= p, пока x >= p.
  • Количество цифр: цикл делений или длина строки перевода.
  • Перевести число в base p: собирайте остатки с конца.
  • «Оканчивается на 23 в base 6» — это x % 36 == 15.
  • Для отрицательных сначала берите модуль.
x % p — последняя цифраx % p**k — последние k цифр(23)₆ = 2·6 + 3 = 15

Пары любых элементов i < j

Иногда пара — это не два соседних элемента, а любые два различных элемента, порядок не важен. Полный двойной цикл делает около n²/2 проверок: при n = 10 000 это 50 млн, что на Python медленно. Если условие зависит от остатков, считайте частоты.

  • Полный перебор: for i in range(n): for j in range(i+1, n).
  • j начинается с i+1, иначе элемент сочетается сам с собой.
  • Для суммы, кратной d, храните количество предыдущих остатков.
  • Нужный остаток: need = (-x) % d.
  • Для максимума суммы храните максимальное значение по остатку.
  • «Хотя бы один делится на d» разбивайте на два счётчика.
  • Для произведения по модулю d перемножайте остатки по модулю d.
need = (-x) % dcount += cnt[need]

Кольцо, симметрия и расстояние

В закольцованной последовательности после последнего элемента идёт первый: индекс берут по модулю длины. Симметричные пары стоят на равном расстоянии от концов. Тройки на равном расстоянии делят последовательность на три части.

  • Сосед справа по кругу: a[(i+1) % n], слева: a[(i-1) % n].
  • Окно по кругу: индексы (i+k) % n.
  • Симметричная пара: a[i] и a[n-1-i].
  • Центральный элемент при нечётной длине в пары не входит.
  • Тройки на расстоянии d = n//3: zip(a, a[d:], a[2*d:]).
  • Для кольца из n элементов окно длины k даёт ровно n окон.
(i + 1) % na[i], a[n - 1 - i]d = n // 3

Агрегаты ответа

Почти всегда ответ — два числа: количество подходящих окон и второй агрегат. Вторым агрегатом бывает максимум, минимум, сумма всех сумм, среднее арифметическое или характеристика лучшего окна. Внимательно читайте, что именно просят.

  • Количество: len(b).
  • Максимум суммы: max(b), минимум: min(b).
  • Сумма всех найденных сумм: sum(b).
  • Среднее с целой частью: sum(b) // len(b).
  • Максимальный элемент среди окон: max(max(w) for w in windows).
  • Если нужен сам элемент, собирайте элементы, а не суммы.
  • Начальное значение для максимума: None или очень маленькое число.
  • −10**18 безопаснее, чем 0, если ответ может быть отрицательным.
len(b), max(b), min(b), sum(b)sum(b) // len(b)

Проверка и отладка

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

  • Начните с примера из условия: он есть у многих задач.
  • Сделайте файл из 5–10 чисел и посчитайте ответ вручную.
  • Проверьте последнее окно: оно должно заканчиваться на a[n-1].
  • Проверьте отрицательные числа в условиях на цифры.
  • Убедитесь, что порядок вывода: сначала количество, потом второй агрегат.
  • Если ответ не совпал, выведите несколько первых подходящих окон.
  • Сравните len(b) и количество итераций цикла.
print(len(b), max(b))print(b[:5]) для отладки

Разбор примера

Учебный пример: пары с опорным числом

Дан файл из десяти чисел: 14, 23, 5, 28, 40, 7, 13, 21, 9, 33. Нужно найти количество пар подряд, в которых ровно одно число делится на 7, а сумма больше максимального элемента, оканчивающегося на 3. Во втором числе ответа — максимальная сумма таких пар.

Пары подряд и проверка условий
ПараСуммаПодходит
14, 2337да
23, 528нет: нет кратных 7
5, 2833нет: сумма не больше 33
28, 4068да
40, 747да
7, 1320нет: сумма не больше 33
13, 2134да
21, 930нет: сумма не больше 33
9, 3342нет: нет кратных 7
  1. Опорное число: максимальный элемент с последней цифрой 3 — это 33 (23 и 13 меньше).
  2. Идём по парам подряд и проверяем, что ровно одно число делится на 7: в паре 14 и 23 это 14.
  3. Сумма 14 + 23 = 37 больше 33 — первая пара найдена.
  4. Пара 5 и 28 даёт сумму 33, а нужно строго больше 33, поэтому она не подходит.
  5. Подходят пары с суммами 37, 68, 47 и 34; максимум равен 68.

Ответ4 68.

Способы решения

Выберите метод под формулировку

Методы собраны по решениям задания 17 из базы Kompege. Начните с того, что именно нужно найти в условии.

01

когда пара — два соседних элемента

Пара подряд: базовый шаблон

Когда использовать: Условие относится к двум идущим подряд числам, а ответ — количество и максимум или минимум суммы.

  1. Прочитайте все числа в список.
  2. Найдите опорное число, если оно есть в условии.
  3. Пройдите циклом по парам a[i], a[i+1].
  4. Проверьте условие и добавьте сумму пары в список.
  5. Выведите количество и нужный агрегат.

Пример

В файле 6, 2, 9, −3, 6. Считаем пары, где хотя бы одно число делится на 3, и ищем максимальную сумму.

a = [6, 2, 9, -3, 6]

b = []
for i in range(len(a) - 1):
    x, y = a[i], a[i + 1]
    if x % 3 == 0 or y % 3 == 0:
        b.append(x + y)

print(len(b), max(b))  # 4 11

Ответ4 11.

Задача № 16264 (база Kompege); пример по мотивам задачи № 1970.

02

когда важна позиция внутри окна

Тройка подряд и центральный элемент

Когда использовать: Условие выделяет средний элемент тройки или проверяет все три позиции по-разному.

  1. Определите длину окна и позиции элементов.
  2. Опишите проверку одного элемента функцией.
  3. Пройдите по окнам через zip или срез.
  4. Проверьте условие для каждой позиции.
  5. Соберите суммы и выведите ответ.

Пример

Ищем тройки, в которых только среднее число — положительное трёхзначное, оканчивающееся на 5.

def ok(x):
    return 100 <= x <= 999 and x % 10 == 5

a = [12, 105, 37, 250, 5, 41, 8, 96, 335, 7]
b = []
for x, y, z in zip(a, a[1:], a[2:]):
    if not ok(x) and ok(y) and not ok(z):
        b.append(x + y + z)

print(len(b), max(b))  # 2 438

Ответ2 438.

Задача № 3834 (база Kompege).

03

когда окно длиннее трёх

Окно длины k: пятёрки и четвёрки

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

  1. Задайте k — длину окна.
  2. Пройдите range(n-k+1).
  3. Возьмите срез a[i:i+k].
  4. Посчитайте сумму логических условий по элементам.
  5. Добавьте сумму окна и выведите агрегат.

Пример

Пятёрки, где ровно три числа оканчиваются на 4, а максимум пятёрки кратен максимальному трёхзначному числу из одинаковых цифр (777).

a = [4, 14, 24, 34, 777, 44, 4, 9, 14, 24, 34, 54]
m = max(x for x in a if 100 <= abs(x) <= 999 and len(set(str(abs(x)))) == 1)

b = []
for i in range(len(a) - 4):
    w = a[i:i + 5]
    if sum(abs(x) % 10 == 4 for x in w) == 3 and max(w) % m == 0:
        b.append(sum(w))

print(len(b), max(b))  # 2 868

Ответ2 868.

Задача № 11917 (база Kompege).

04

когда сказано «ровно два»

Ровно k условий в окне

Когда использовать: Условие требует посчитать, сколько элементов окна обладают свойством: ровно два, ровно один, не более трёх.

  1. Запишите свойство как логическое выражение.
  2. Просуммируйте выражения по элементам окна.
  3. Сравните сумму с k.
  4. Не путайте «ровно k» с «хотя бы k».
  5. Проверьте окно, где свойство выполнено у всех элементов.

Пример

Тройки, в которых нечётное число ровно одно.

a = [12, 35, 8, 7, 20, 11, 14, 9, 6]

b = []
for i in range(len(a) - 2):
    w = a[i:i + 3]
    if sum(x % 2 for x in w) == 1:
        b.append(sum(w))

print(len(b), max(b))  # 4 55

Ответ4 55.

Задача № 11625 (база Kompege).

05

когда есть максимум или минимум по условию

Опорное число с фильтром

Когда использовать: В условии есть «максимальный элемент, оканчивающийся на 7», «минимальный двузначный» или похожая характеристика всего файла.

  1. Выпишите свойство опорного числа.
  2. Найдите его генератором max или min.
  3. Убедитесь, что модуль учтён для отрицательных чисел.
  4. Используйте опорное число в условии окна.
  5. Проверьте, что в файле действительно есть такой элемент.

Пример

Тройки, где ровно два числа оканчиваются на 2, а сумма больше удвоенного максимума с последней цифрой 7.

a = [12, 22, 5, 27, 32, 42, 9, 20, 2, 17]
M = max(x for x in a if x % 10 == 7)

b = []
for i in range(len(a) - 2):
    w = a[i:i + 3]
    if sum(x % 10 == 2 for x in w) == 2 and sum(w) > 2 * M:
        b.append(sum(w))

print(len(b), max(b))  # 2 101

Ответ2 101: опорное число 27, подходят суммы 101 и 83.

Задача № 10930 (база Kompege).

06

когда сравнивают элементы внутри окна

Порядок элементов: между, больше, меньше

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

  1. Запишите цепочку сравнений.
  2. Проверьте, что все три элемента различны, если это требуется.
  3. Для «между» используйте x < y < z or x > y > z.
  4. Для нестрогого порядка добавьте равенства.
  5. Проверьте окно с равными элементами.

Пример

Тройки, где числа строго возрастают или строго убывают.

a = [3, 8, 9, 5, 2, 7, 1, 6]

b = []
for x, y, z in zip(a, a[1:], a[2:]):
    if (x < y < z) or (x > y > z):
        b.append(x + y + z)

print(len(b), max(b))  # 2 20

Ответ2 20.

Задача № 9946 (база Kompege).

07

когда важны цифры числа

Свойства цифр и разрядность

Когда использовать: Считают количество четырёхзначных чисел, сумму цифр, последнюю цифру или палиндром.

  1. Возьмите str(abs(x)), чтобы убрать минус.
  2. Посчитайте длину, сумму цифр или нужную позицию.
  3. Для последних цифр используйте остатки % 10 и % 100.
  4. Оформите свойство функцией, если оно повторяется.
  5. Проверьте на числе с нулями внутри и на отрицательном.

Пример

Тройки, где ровно два числа четырёхзначные; во втором числе — максимум суммы модулей.

a = [1234, 56, 7890, 4321, 99, 1000, 7, 5555, 12]

b = []
for i in range(len(a) - 2):
    w = a[i:i + 3]
    if sum(len(str(abs(x))) == 4 for x in w) == 2:
        b.append(sum(abs(x) for x in w))

print(len(b), max(b))  # 5 12310

Ответ5 12 310.

Задачи № 11236 и № 14313 (база Kompege).

08

когда есть base 7, 8 или 16

Запись в другой системе счисления

Когда использовать: Условие говорит об окончании, первой цифре или количестве цифр в системе счисления p.

  1. Определите p и что именно нужно: последняя цифра, первая или вся запись.
  2. Последняя цифра — это x % p.
  3. Первую цифру ищите делением на p.
  4. Для полной записи напишите функцию перевода.
  5. Не забывайте про модуль для отрицательных чисел.

Пример

Тройки, где ровно два числа оканчиваются на 5 в семеричной записи, а сумма больше удвоенного максимума, начинающегося с 2 в семеричной записи.

def first_base7(x):
    x = abs(x)
    while x >= 7:
        x //= 7
    return x

a = [5, 12, 19, 15, 40, 9, 26, 7, 33]
M = max(x for x in a if first_base7(x) == 2)

b = []
for i in range(len(a) - 2):
    w = a[i:i + 3]
    if sum(x % 7 == 5 for x in w) == 2 and sum(w) > 2 * M:
        b.append(sum(w))

print(len(b), max(b))  # 4 75

Ответ4 75.

Задачи № 12746 и № 11717 (база Kompege).

09

когда нужна функция-предикат

Простые, квадраты и палиндромы

Когда использовать: Условие опирается на математическое свойство числа, а не на его цифры.

  1. Напишите функцию is_prime, is_square или is_palindrome.
  2. Проверьте её на 0, 1, 2 и на большом числе.
  3. Используйте функцию в условии окна.
  4. Для квадратов берите isqrt, для палиндромов — строку.
  5. Не считайте 1 простым числом.

Пример

Пары, где простое ровно одно число, а сумма меньше максимального простого в файле.

def is_prime(n):
    if n < 2:
        return False
    d = 2
    while d * d <= n:
        if n % d == 0:
            return False
        d += 1
    return True

a = [7, 10, 11, 4, 13, 8, 9, 19, 6]
M = max(x for x in a if is_prime(x))
b = [x + y for x, y in zip(a, a[1:]) if is_prime(x) ^ is_prime(y) and x + y < M]
print(len(b), max(b))  # 3 17

Ответ3 17.

Задачи № 13075 и № 13994 (база Kompege).

10

когда пара — не соседние числа

Пары различных элементов i < j

Когда использовать: В условии сказано «два различных элемента», «порядок не важен» или «пара любых элементов». Полный перебор при 10 000 чисел слишком медленный.

  1. Определите, зависит ли условие от остатков или от самих значений.
  2. Для остатков заведите массив частот длины d.
  3. Перед добавлением текущего числа найдите нужный остаток.
  4. Обновите количество и максимум для остатка текущего числа.
  5. Сверьте с полным перебором на маленьком файле.

Пример

Пары различных элементов, сумма которых кратна 60; нужны количество и максимальная сумма.

a = [40, 20, 80, 100, 140, 60, 10, 50]

cnt = [0] * 60
mx = [None] * 60
total = 0
best = None

for x in a:
    need = (-x) % 60
    if cnt[need]:
        total += cnt[need]
        s = x + mx[need]
        if best is None or s > best:
            best = s
    r = x % 60
    cnt[r] += 1
    if mx[r] is None or x > mx[r]:
        mx[r] = x

print(total, best)  # 7 240

Ответ7 240.

Задача № 14716 (база Kompege); пример по мотивам задачи № 4416.

11

когда последовательность закольцована

Кольцо и симметричные пары

Когда использовать: После последнего элемента идёт первый, или пары стоят на равном расстоянии от концов.

  1. Определите, что считается соседом: по индексу или по кругу.
  2. Для кольца берите индекс по модулю n.
  3. Для симметричных пар идите от краёв к центру.
  4. Для равномерных троек найдите шаг d = n // 3.
  5. Проверьте, что элементы не повторяются в одной тройке.

Пример

Закольцованная последовательность: тройки на расстоянии d = n // 3.

a = [1, 2, 4, 4, 9, 16]
d = len(a) // 3

b = []
for x, y, z in zip(a, a[d:], a[d * 2:]):
    if sum(abs(v) % 2 == 0 for v in (x, y, z)) == 1:
        b.append(x + y + z)

print(len(b), max(b))  # 1 14

Ответ1 14.

Задачи № 10004 и № 5439 (база Kompege).

12

когда ответ — не максимум

Количество и среднее арифметическое

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

  1. Соберите суммы подходящих окон в список.
  2. Проверьте, что список не пуст.
  3. Выберите агрегат: max, min, sum или sum // len.
  4. Для среднего берите целую часть, если это сказано в условии.
  5. Выведите два числа в порядке условия.

Пример

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

a = [10, 10, 10, 20]

b = []
for i in range(len(a) - 2):
    w = a[i:i + 3]
    if any(10 <= abs(x) <= 99 for x in w) and sum(w) % 2 == 0:
        b.append(sum(w))

print(len(b), sum(b) // len(b))  # 2 35

Ответ2 35.

Задача № 12471 (база Kompege).

Шпаргалка: формулировка → метод

В условииЧто делать
«пара подряд»цикл по a[i], a[i+1]
«тройка», «четвёрка», «пятёрка»срез a[i:i+k]
«два различных элемента»пары i < j или частоты остатков
«ровно два из трёх»sum(bool) == 2
«хотя бы один»any(...) или sum(...) >= 1
«только один»исключающее ИЛИ ^
«максимальный, оканчивающийся на …»max(x for x in a if ...)
«минимальный двузначный»min(x for x in a if 10 <= abs(x) <= 99)
«кратно d»x % d == 0
«оканчивается на 13»abs(x) % 100 == 13
«сумма цифр»sum(map(int, str(abs(x))))
«ровно k цифр»len(str(abs(x))) == k
«полный квадрат»isqrt(x) ** 2 == x
«простое число»проверка делителей до isqrt(n)
«палиндром»s == s[::-1]
«в семеричной оканчивается на 5»x % 7 == 5
«начинается с 2 в base 7»делить на 7, пока x >= 7
«между крайними»x < y < z or x > y > z
«закольцовано»a[(i + 1) % n]
«симметричные пары»a[i] и a[n - 1 - i]
«ответ — среднее»sum(b) // len(b)
«нет подходящих окон»проверить b перед max

По базе Kompege: 984 задачи, 66 решений (63 программных и 3 текстовых) и 232 видеоразбора (144 YouTube, 53 VK, 35 Rutube) по заданию 17. Для методов отобраны решения задач № 16264, 3834, 11917, 11625, 10930, 9946, 11236, 14313, 12746, 11717, 13075, 13994, 14716, 10004, 5439 и 12471; дополнительные примеры и видеоразборы — задачи № 1970, 1995, 4108, 4542, 17939, 2710, 4414, 4416, 3895, 2491 и 3749; примеры переработаны в учебные.

Разборы из видео

Задачи, которые разбирают в курсе

Условия и код показаны в кадре в конце соответствующего фрагмента. Источники задач — КомпЕГЭ, сайт К. Полякова, ФИПИ и другие.

№ 7986

разбор из видео · 2026

Тройки с остатками и четырёхзначными числами

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

a = [int(x) for x in open('17-428.txt')]
mn, mx = min(a), max(a)

def check1(x, y, z):
    return 1000 <= x < 10000 or 1000 <= y < 10000 or 1000 <= z < 10000

def check2(x, y, z):
    return (x % 11 == mn % 11) + (y % 11 == mn % 11) + (z % 11 == mn % 11) <= 1

def check3(x, y, z):
    return (x % 7 == mx % 7) + (y % 7 == mx % 7) + (z % 7 == mx % 7) >= 2

ans = []
for x, y, z in zip(a, a[1:], a[2:]):
    if check1(x, y, z) and check2(x, y, z) and check3(x, y, z):
        ans.append(x + y + z)
print(len(ans), sum(ans) // len(ans))

Ответ589 38508

Полный архив

Все фрагменты видеоразборов

По одному пункту на каждую главу: условие или код из кадра, ответ и ссылка. Источники задач — КомпЕГЭ, сайт К. Полякова, ФИПИ и другие; номер берётся из кадра. Текст с экрана распознан автоматически, служебные строки и артефакты удалены; если текст нечитаем, остаются название, таймкод и ссылка.

Показать все фрагменты (19)
2026 · 00:00 Приветствие 4310

Кабанов) В файле 17-4.txt содержится "последовательность целых чисел. Элементы последовательности могут принимать целые значения от Одо 10 000 включительно. Рассматривается множество элементов последовательности, которые делятся на 3 и не делятся Ha 7, 17, 19, 27. Найдите количество таких чисел и максимальное 113 них.

2026 · 06:00 Отбор чисел I 4322

Кабанов) В файле 17-4.txt содержится "последовательность целых чисел. Элементы последовательности могут принимать пелые значения от Оо 10 000 включительно. Рассматривается множество элементов последовательности, которые оканчиваются. Найдите количество таких чисел п сумму минимального

2026 · 14:35 Отбор чисел II

последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. Рассматривается множество элементов последовательности, которые оканчиваются на 5 или 7 и при этом не делятся ни на 9, ни на 11. Найдите количество таких чисел и сумму минимального

2026 · 20:50 Отбор чисел III (условия с отрицательными числами) 4322

последовательность целых чисел. Элементы последовательности могут принимать целые значения OT -10 000 до 10 000 включительно. Рассматривается множество элементов последовательности, которые "оканчиваются на 5 или 7 и при этом не делятся ни на 9, ни на 11. Найдите количество таких чисел и сумму минимального и максимального из них.

2026 · 28:25 Перебор пар I

последовательность целых чисел. Элементы последовательности могут принимать значения от -100 до 100 включительно. Определите сначала количество пар элементов последовательности, в которых оба числа оканчивается на 5, а затем максимальную из сумм элементов таких пар. Под парой подразумевается два идущих подряд элемента последовательности. Например, для последовательности из 5 элементов: 35.—15.7, 5 ответ должен быть 240,

2026 · 36:40 Перебор пар II

Определите сначала количество пар элементов последовательности, в которых оба числа оканчивается на 5, а затем максимальную 113 сумм. Под парой подразумевается два идущих подряд элемента последовательности. 35, —15, 7, 5 ответ должен быть 2 40. последовательность целых чисел.

ans = []
if abs(x)%10==5 and abs(y)%10==5:
print(len(ans), max(ans))
2026 · 43:45 Перебор пар III

последовательности могут принимать целые значения от 0 до 10 000 включительно. Определите количество пар чисел, в которых оба элемента меньше, чем наибольшее "из всех чисел в файле, делящихся на 71, и хотя бы один элемент из двух делится на 13. В ответе запишите два числа: сначала количество найденных пар, а затем — минимальную сумму элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

2026 · 48:40 Перебор пар IV 4690

(№ 4690) В файле 17-243.txt содержится последовательности могут принимать пелые значения от Одо 10 000 включительно. Определите количество пар чисел, в которых оба элемента меньше, чем наибольшее "из всех чисел в файле, делящихся на 71, и хотя бы один элемент из двух делится на 13. В ответе запишите два числа: сначала количество найденных пар, а затем — минимальную сумму элементов таких пар. В данной задаче под парой подразумевается два идущих подряд.

mx = max([x for x in a if x%71==0])
ans = []
2026 · 52:35 Перебор пар V

В этом фрагменте — теория или пояснение; решение показано в видео.

2026 · 55:10 Перебор пар VI

Кабанов) В файле 17-3.txt содержится "последовательность целых чисел. Элементы последовательности могут принимать целые значения от -10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество троек элементов последовательности, в которых произведение кратно 7, а сумма оканчивается на 5, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента

2026 · 59:35 Перебор троек I 6758

последовательность целых чисел, не превышающих по модулю 100 000. Определите количество троек элементов последовательности, в которых не более двух "из трёх элементов являются четырёхзначными числами, асумма элементов тройки не больше максимального элемента последовательности, оканчивающегося на 25. В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек. данной задаче под тройкой подразумевается три идущих. подряд элемента последовательности.

2026 · 1:03:15 Перебор троек II (сумма условий) 7526

(№ 7526) (ЕГЭ-2024) В файле 17-407.txt содержится последовательность целых чисел, не превышающих по модулю 100 000. Определите количество пар последовательности, в которых хотя бы одно число отрицательно, а сумма чисел пары меньше количества чисел последовательности, кратных 32. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд.

2026 · 1:11:40 Перебор пар VII 7526

(№ 7526) (ЕГЭ-2024) В файле 17-407.txt содержится последовательность целых чисел, не превышающих по модулю 100 000. Определите количество пар последовательности, в которых хотя бы одно число отрицательно, а сумма чисел пары меньше количества чисел последовательности, кратных 32. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

ans = []
print(len(ans), max(ans))
2026 · 1:14:40 Перебор троек III (вынесение условия в функцию) 8185

содержится последовательность целых чисел, не превышающих по модулю 100 000. Определите количество троек последовательности, в которых все числа одного знака, при этом произведение минимального и максимального элементов тройки "больше квадрата минимального элемента последовательности, который оканчивается на 15 и является трёхзначным числом. В ответе запишите количество найденных троек чисел, затем минимальное из произведений максимального и минимального элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента

2026 · 1:22:30 Перебор троек IV (мин и макс число тройки) 8185

содержится последовательность целых чисел, не превышающих по модулю 100 000. Определите количество троек последовательности, в которых все числа одного знака, при этом произведение минимального и максимального элементов тройки "больше квадрата минимального элемента последовательности, который оканчивается на 15 и является трёхзначным числом. В ответе запишите количество найденных троек чисел, затем минимальное из произведений максимального и минимального элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента

ans = []
mn = min(x,y,z)
mx = max(x,y,z)
2026 · 1:28:05 Сложные условия I 7986

txt содеряапся последовательность натуральных чисел, не превышающих 100 000. Определите количество троек элементов. — в тройке есть четырёхзначные числа; — в тройке не более одного числа, у которого остаток от деления на 11 равен "остатку от деления на 11 минимального элемента всей последовательности; — в тройке не менее двух чисел, у которых остаток OT деления на 7 равен. остатку от деления на 7 максимального элемента всей последовательности. сначала количество найденных троек, затем: среднее арифметическое сумм элементов этих троек, округленное до "ближайшего меньшего целого числа. В данной задаче под тройкой: "подразумевается три идущих подряд элемента последо

mn = min(a)
mx = max(a)
return 1
def check2(x,y,z):
def check3(x,y,2):
2026 · 1:35:30 Сложные условия II

Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. Определите количество пар чисел, в которых ровно один из двух элементов больше, чем сумма цифр всех чисел в файле, делящихся на 61, а десятичная запись другого оканчивается на 33. В ответе запишите два числа: сначала количество найденных пар, а затем — минимальную сумму элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

ans = []
print(len(ans), min(ans))
2026 · 1:42:25 Сложные условия III

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

ans = []
def f(x):
return x>® and 10<=x<100 and x%2==0
print(len(ans), max(ans))
2026 · 1:52:10 Окончание и напутствия 4659

(№4659) В файле 17-4.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. Определите количество пар, в которых оба элемента меньше, чем среднее арифметическое всех чисел в файле, а их сумма оканчивается на 19. В ответе запишите два числа: сначала количество найденных пар, а затем — минимальную сумму элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

avg = sum(a)/len(a)
ans = []
if x<avg and y<avg and (x+y)%100==19:

Типичные ошибки

  • неверные начальные значения
  • ошибка на единицу
  • прочитаны не все данные
  • переполнение

Ключевые формулы

  • окон длины k в последовательности из n чисел: n − k + 1
  • M = max(x for x in a if условие)
  • ответ: количество и максимум (минимум, сумма или среднее) сумм окон

Практика

Навигатор и методические рекомендации опубликованы в 2026 году: номера заданий в них могут отличаться от нумерации 2027 года. Ориентируйтесь на тему.