Все статьи по ЕГЭ
4 сент. 2025 г. - 30 мин. чтения
ЕГЭ Задание 17

ЕГЭ Задание 17

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

@ashtana

Штана Альберт Игоревич

В этой статье будет разобрано задание 17.

Рассмотрим типовые задачи из семнадцатого задания ЕГЭ по информатике.

Данное задание относится к повышенному уровню сложности.

Время выполнения задания ≈ 14 минут.

Данное задание проверяет умение составить алгоритм обработки числовой последовательности. Решение программируется на Python.

Задача 1

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -10000 до 10000 включительно.

Определите и запишите в ответе сначала количество пар элементов последовательности, в которых оба числа делятся нацело на 7, затем минимальную из сумм элементов таких пар.

В данной задаче под парой подразумевается два подряд идущих элемента последовательности. Например, для последовательности из пяти элементов: 7; 14; 21; -7; 4 - ответ 3 14.

Решение:

Создадим программу на Python.

f = open('17_1.txt')
c = 0
mn = 10 ** 10
n1 = int(f.readline())
for s in f.readlines():
    n2 = int(s)
    if abs(n1) % 7 == 0 and abs(n2) % 7 == 0:
        c += 1
        mn = min(mn, n1 + n2)
    n1 = n2
print(c, mn)

В начале открываем файл на чтение с помощью команды open(). Файл и код программы должны находится в одной папке, чтобы не прописывать полный путь. Переменная c(счётчик) отвечает за количество пар, удовлетворяющих условию задачи. Переменная mn - это минимальная сумма элементов подходящих пар. В переменную mn кладём очень большое число, т.к. будем искать минимум. Затем считываем в переменную n1 первое число из файла. C помощью конструкции "for s in f.readlines():" можно перебрать остальные строки из файла. В цикле записываем второе число для пары в переменную n2. Важно применить функцию int() к переменной цикла, чтобы преобразовать строку в число. После того как у нас появилась первая пара (n1 и n2), проверяем её под условие задачи. Если одновременно два числа из пары делятся на 7 без остатка, то подсчитываем такую пару. Т.к. в файле есть отрицательные числами — применяем функцию модуль числа abs(). Пример: abs(-13)%10=3. Если пара подходит, то проверяем сумму элементов этой пары на минимальность. В переменную mn заносится минимальное значение из двух вариантов: значение mn или n1+n2. В конце цикла нужно сохранить второе число(n2) в переменную n1. Тем самым мы получим новую пару чисел в последующей итерации цикла.

Ответ: 97 | -15820

Задача 2

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -100 000 до 100 000 включительно.

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

В ответе запишите количество найденных троек чисел, затем минимальную из сумм элементов таких троек.

В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

Решение:

Создадим программу на Python.

f = open('17_2.txt')
data = [int(s) for s in f.readlines()]
data_f = filter(lambda x: abs(x) % 100 == 80, data)
maxi = max(data_f)
n1 = data[0]
n2 = data[1]
mn = []
k = 0
for n3 in data[2:]:
    if (1000 <= abs(n1) <= 9999) or (1000 <= abs(n2) <= 9999) or (1000 <= abs(n3) <= 9999):
        if n1 + n2 + n3 > maxi:
            k += 1
            mn.append(n1 + n2 + n3)
    n1 = n2
    n2 = n3
print(k, min(mn))

Разберём код построчно:

  1. Открываем файл на чтение с помощью функции open. В файле присутствуют отрицательные числа;
  2. Создаём переменную список data в которую переписываем данные в виде чисел из текстового файла;
  3. Чтобы найти максимальное значение: отфильтруем список data(встроенная функция filter) в новый список data_f по условию задачи — элементы оканчивающиеся на 80 (abs(x) % 100 == 80);
  4. Находим максимальный элемент из отфильтрованного списка;
  5. Начинаем формировать тройки элементов в переменную n1 запишем первый элемент списка data;
  6. В переменную n2 запишем второй элемент списка data;
  7. Создадим пустой массив mn в котором будем хранить суммы трёх элементов и по нему вычислять минимум;
  8. Создадим переменную k которая будет служить счётчиком в цикле;
  9. Перебираем циклом for список начиная с третьего элемента последовательности(data[2:] — срез по индексу 2 до конца последовательности);
  10. Проверяем условие, что хотя бы один из трёх элементов последовательности является четырёхзначным;
  11. Если условие было истинно проверяем тогда что сумма элементов n1+n2+n3 больше максимума из ранее отфильтрованного списка;
  12. Увеличиваем счётчик на 1;
  13. Добавляем сумму элементов в массив mn;
  14. Чтобы двигаться дальше по тройкам элементов: меняем местами первый элемент со вторым;
  15. Также меняем второй элемент с третьим(третий снова принимает значение в цикле из списка data)
  16. Когда цикл завершиться выводим ответ на задачу: счётчик элементов для троек и минимальное значение из массива сумм элементов таких троек.

Ответ: 1002 | 14898

Задача 3

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -100 000 до 100 000 включительно.

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

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

В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение:

Создадим программу на Python.

f = open('17_3.txt')
data = [int(s) for s in f.readlines()]
sa = sum(data) / len(data)
k = 0
mx = []
n1 = data[0]
for n2 in data[1:]:
    l1 = abs(n1) % 10
    l2 = abs(n2) % 10
    if l1 % 2 == 1 and l2 % 2 == 1 and l1 == l2 and (n1 > sa or n2 > sa):
        k += 1
        mx.append(abs(n2 - n1))
    n1 = n2
print(k, max(mx))

Разберём код построчно:

  1. Открываем файл на чтение с помощью функции open. В файле присутствуют отрицательные числа;
  2. Создаём переменную список data в которую переписываем данные в виде чисел из текстового файла;
  3. Вычисляем среднее арифметическое значение: Сумму элементов делим на количество элементов в списке;
  4. Заводим переменную счётчик которая будет считать пары элементов удовлетворяющих условию задачи;
  5. Заводим список mx. В него будем сохранять разницу между элементами пар, которые прошли проверку по условию задачи и в конце вычислим максимум по этому списку;
  6. Создаём переменную n1 для первого элемента пары;
  7. В цикле перебираем список со второго элемента записывая в переменную цикла второй элемент пары;
  8. В переменную l1 записываем остаток от деления на 10 первого элемента пары;
  9. В переменную l2 записываем остаток от деления на 10 второго элемента пары;
  10. Проверяем элементы по условию задачи;
  11. Если условие задачи выполняется тогда увеличиваем счётчик на единицу;
  12. Записываем в список mx разницу между элементами пары n2 и n1;
  13. В конце работы цикла в переменную n1 записываем второй элемент пары из n2, тем самым далее в цикле будем проверять второй и третий элемент и т.д.;
  14. После того как перебрали все пары элементов в цикле выводим ответ на задачу;

Ответ: 270 | 198724

Задача 4

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -10000 до 10000 включительно.

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

В данной задаче под парой подразумевается два подряд идущих элемента последовательности. Например, для последовательности из пяти элементов: 9; 15; 23; -3; 4 - ответ 2 24.

Решение:

Напишем программу на Python.

f = open('17_4.txt')
data = [int(s) for s in f.readlines()]
k = 0
mx = []
n1 = data[0]
for n2 in data[1:]:
    if (0 < n1 == (round(n1 ** 0.5) ** 2)) or (0 < n2 == (round(n2 ** 0.5) ** 2)):
        k += 1
        mx.append(n1 + n2)
    n1 = n2
print(k, max(mx))

Данная задача отличается от предыдущих тем что мы в цикле должны правильно определить условие проверки пары чисел на полный квадрат.В условии извлекаем корень через возведение числа в степень 0.5, затем округляем и возводим в квадрат. Если получилось то же число значит оно является полным квадратом.

Ответ: 60 | 18555

Задача 5

В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно.

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

В ответе запишите количество найденных пар, затем минимальную из сумм элементов таких пар.

В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение:

Напишем программу на Python.

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


f = open('17_5.txt')
data = [int(s) for s in f.readlines()]
mx = -10 ** 10
for x in data:
    if nm_f(x):
        mx = max(mx, x)

k = 0
mn = 10 ** 10
n1 = data[0]
for n2 in data[1:]:
    if n1 > mx or n2 > mx:
        k += 1
        mn = min(mn, n1 + n2)
    n1 = n2
print(k, mn)

В этой задаче ещё определили функцию для проверки числа на простоту. Простое число — это число, которое имеет ровно два различных делителя: 1 и само число.После определения функции для проверки числа на простоту пишем код аналогичный кодам из задач выше.

Ответ: 22 | 105792

Задача 6

В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно.

Определите количество пар последовательности, в которых оба элемента больше минимального числа во всей последовательности, которое в семеричной системе оканчивается на 3.

В ответе запишите количество найденных пар, затем максимальную сумму квадратов элементов таких пар.

В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение:

Напишем программу на Python.

f = open('17_6.txt')
data = [int(s) for s in f.readlines()]
mn = 10 ** 10
for x in data:
    if x % 7 == 3:
        mn = min(mn, x)
k = 0
mx = -10 ** 10
n1 = data[0]
for n2 in data[1:]:
    if n1 > 87 and n2 > 87:
        k += 1
        mx = max(mx, n1 ** 2 + n2 ** 2)
    n1 = n2
print(k, mx)

Сначала находим минимальное число во всей последовательности чисел, которое в семеричной системе оканчивается на 3. Остаток при делении на 7 — это и есть последняя цифра в семеричной системе в разряде единиц. Далее пишем аналогичный код как в прошлых задачах.

Ответ: 4993 | 19774187428

Задача 7

В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно.

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

В ответе запишите количество найденных пар, затем минимальную сумму элементов таких пар.

В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение:

Напишем программу на Python.

f = open('17_7.txt')
data = [int(s) for s in f.readlines()]
mx = -10 ** 10
for x in data:
    if str(x)[0] == '1':
        mx = max(mx, x)
k = 0
mn = 10 ** 10
n1 = data[0]
for n2 in data[1:]:
    if n1 > mx and n2 > mx:
        k += 1
        mn = min(mn, n1 + n2)
    n1 = n2
print(k, mn)

Сначала найдём максимальное число во всей последовательности, которое начинается на цифру 1. С помощью функции str() преобразовываем число x в строку и анализируем первый символ этой строки. Далее пишем аналогичный код как в предыдущих задачах.

Ответ: 3198 | 43629

Задача 8

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -10 000 до 10 000 включительно.

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

В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

Решение:

Напишем программу на Python.

f = open('17_8.txt')
data = [int(s) for s in f.readlines()]
k = 0
mn = 10 ** 10
n1 = data[0]
n2 = data[1]
for n3 in data[2:]:
    if n1 < n2 < n3:
        k += 1
        maxi = max(n1, n2, n3)
        mini = min(n1, n2, n3)
        mn = min(mn, maxi - mini)
    n1 = n2
    n2 = n3
print(k, mn)

Здесь проверяем не пару чисел, а тройку. И между минимумом и максимумом из трёх чисел вычисляем минимум от разницы максимума и минимума.

Ответ: 832 | 460

Задача 9

В файле содержится последовательность из 10 000 целых положительных чисел. Каждое число не превышает 10 000.

Определите и запишите в ответе сначала количество пар элементов последовательности, у которых сумма элементов кратна 9, затем максимальную из сумм элементов таких пар.

В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

Решение:

Напишем программу на Python.

f = open('17_9.txt')
data = [int(s) for s in f.readlines()]
k = 0
mx = 0
for i in range(0, len(data)):
    for j in range(i + 1, len(data)):
        if (data[i] + data[j]) % 9 == 0:
            k += 1
            mx = max(data[i] + data[j], mx)
print(k, mx)

То что мы ранее делали с помощью одного цикла и двух переменных n1, n2 — теперь мы сделали это с помощью двух циклов. Циклы настраиваются таким образом, что мы берём число и начинаем его комбинировать во втором цикле со всеми числами, которые стоят после этого числа. Таким образом, организован перебор всех возможных комбинации без повторения пар.

Ответ: 5553635 | 19998

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

Задача 10 (Демоверсия ЕГЭ 2024)

В файле содержится последовательность натуральных чисел, каждое из которых не превышает 100 000.

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

Гарантируется, что в последовательности есть хотя бы одно число, оканчивающееся на 13.

В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек.

В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.

Решение:

Напишем программу на Python с комментариями в коде.

file17 = open('17_2024.txt')  # Открываем файл задачи на чтение
data_list = [int(i) for i in file17.readlines()]  # Прочитаем данные из файла в список целых чисел
# Определим максимальный элемент который оканчивается на 13
max_el = max(data_list, key=lambda x: x if x % 100 == 13 else 0)
max_summ = 0  # Максимальная из сумм элементов троек
k = 0  # Количество найденных троек чисел
n1 = data_list[0]  # Первый элемент
n2 = data_list[1]  # Второй элемент
for x in data_list[2:]:  # Перебираем последовательность
    n3 = x  # Третий элемент
    c = 0  # Переменная счётчик трёхзначности трёх идущих подряд элементов
    if 100 <= n1 <= 999:  # Наглядно проверяем все три элемента на трёхзначность
        c += 1
    if 100 <= n2 <= 999:
        c += 1
    if 100 <= n3 <= 999:
        c += 1
    # По условию если 2 элемента трёхзначные и сумма меньше максимального элемента оканчивающегося на 13
    if c == 2 and n1 + n2 + n3 <= max_el:
        k += 1  # Увеличиваем счётчик на 1 как количество элементов удовлетворяющих условию задачи
        max_summ = max(max_summ, n1 + n2 + n3)  # Вычисляем максимальную сумму трёх элементов удовлетворивших условие
    n1 = n2  # Записываем второй элемент в первый элемент
    n2 = n3  # Записываем третий элемент во второй элемент
print(k, max_summ)  # Выводим ответ

Ответ: 959 | 97471

Задача 11 (Демоверсия ЕГЭ 2025)

В файле содержится последовательность натуральных чисел. Её элементы могут принимать целые значения от 1 до 100 000 включительно.

Определите количество пар последовательности, в которых остаток от деления хотя бы одного из элементов на 16 равен минимальному элементу последовательности.

В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар.

В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение:

Напишем программу на Python с комментариями в коде.

file17 = open('17_2025.txt')  # Открываем файл задачи на чтение
data_list = [int(i) for i in file17.readlines()]  # Прочитаем данные из файла в список целых чисел
# Определим минимальный элемент последовательности
min_el = min(data_list)
max_summ = 0  # Максимальная из сумм элементов пар чисел
k = 0  # Количество найденных пар чисел
n1 = data_list[0]  # Первый элемент
for x in data_list[1:]:  # Перебираем последовательность
    n2 = x  # Второй элемент
    # По условию остаток от деления хотя бы одного из элементов на 16 равен минимальному элементу последовательности
    if n1 % 16 == min_el or n2 % 16 == min_el:
        k += 1  # Увеличиваем счётчик на 1 как количество элементов удовлетворяющих условию задачи
        max_summ = max(max_summ, n1 + n2)  # Вычисляем максимальную сумму пар элементов удовлетворивших условию
    n1 = n2  # Записываем второй элемент в первый элемент и продолжаем цикл
print(k, max_summ)  # Выводим ответ

Ответ: 1214 | 176024

Задача 12 (Демоверсия ЕГЭ 2026)

В файле содержится последовательность натуральных чисел. Её элементы могут принимать целые значения от 1 до 100 000 включительно.

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

В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар.

В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение:

Напишем программу на Python с комментариями в коде.

file17 = open('17_2026.txt')  # Открываем файл задачи на чтение
data_list = [int(i) for i in file17.readlines()]  # Прочитаем данные из файла в список целых чисел
# Определим минимальный двузначный элемент последовательности
min_el = min([x for x in data_list if x > 9])
max_summ = 0  # Максимальная из сумм элементов пар чисел
k = 0  # Количество найденных пар чисел
n1 = data_list[0]  # Первый элемент
for x in data_list[1:]:  # Перебираем последовательность
    n2 = x  # Второй элемент
    # По условию только один из элементов является двузначным числом,
    # а сумма элементов пары кратна минимальному двузначному элементу
    if ((len(str(n1)) == 2 and len(str(n2)) != 2) or (len(str(n2)) == 2 and len(str(n1)) != 2)) and ((n1 + n2) % min_el == 0):
        k += 1  # Увеличиваем счётчик на 1 как количество элементов удовлетворяющих условию задачи
        max_summ = max(max_summ, n1 + n2)  # Вычисляем максимальную сумму пар элементов удовлетворивших условию
    n1 = n2  # Записываем второй элемент в первый элемент и продолжаем цикл
print(k, max_summ)  # Выводим ответ

Ответ: 150 | 9930