Задание 17. Обработки числовой последовательности
В 17 задании ЕГЭ по информатике проверяется умение ученика пользоваться Питоном, считывать данные из текстового файла и анализировать последовательность чисел.
Давайте разберем все основные приемы, используемые в 17 задании.
Считывание данных с текстового файла:
Чтобы считать данные из текстового файла в Питоне, можно использовать конструкцию with:
with open('example.txt', 'r') as file:
Пояснение:
- open('example.txt', 'r') – открывает файл example.txt в режиме чтения
- with гарантирует, что файл будет закрыт после завершения блока.
- as file – создает переменную file, к которой можно обращаться как к открытому файлу
Теперь у созданной переменной file мы можем вызывать методы, позволяющие считывать текст из файла:
file.read() – считываение всего файла
file.readline() – считываение одной строки
file.readlines() – считывает весь файл и записывает одну строку как элемент массива
Пример:

Мы получили массив со всеми строками. В каждой строке на конце есть символ \n – это символ переноса строки. Мы можем его убрать, изменив код:

Здесь мы считываем каждую строку, и пока строка есть (проверка while line), мы убираем последний элемент строки, добавляем ее в массив строк и считываем новую строку.
В данном задании часто попадаются условия про соседние элементы. Давайте разберем как найти соседние элементы
Мы можем перебирать элементы массива простым циклом
for i in words
Но еще мы можем проходиться по индексам последовательности с помощью цикла
for i in range(len(words))
где len(words) – длина массива words, range() – позволяет циклу перебирать числа от 0 до числа, указанного в скобках, не включительно
Таким образом, i – номер текущего элемента, а i + 1 – номер следующего элемента. Так мы можем просто получить значения соседей
words[i – 1] – сосед слева
words[i] – текущий элемент
words[i + 1] – сосед справа
Заметим, что, если писать for i in range(len(words)), то при достижении последнего индекса i обращение к words[i + 1] вызовет ошибку, так как i + 1 будет за пределами длины списка
Таким образом, range(len(words) - 1) гарантирует, что последний индекс i будет на 1 меньше длины списка, позволяя безопасно обращаться к следующему элементу words[i + 1].
Мы разобрали все основные приемы, использующиеся в задании 17. Давайте введем общий алгоритм действий в этой задаче:
1. Чтение и запись данных
2. Поиск подходящих пар
3. Вывод результата
Теперь давайте перейдем к решению 17 задач
1. Демоверсия 2025
В файле содержится последовательность натуральных чисел. Её элементы могут принимать целые значения от 1 до 100 000 включительно. Определите количество пар последовательности, в которых остаток от деления хотя бы одного из элементов на 16 равен минимальному элементу последовательности. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
1. Чтение и запись данных
- Сначала открываем файл 17_1.txt для чтения. Каждую строку проверяем: если строка содержит символ переноса строки (\n), удаляем его. Полученную строку преобразуем в целое число и добавляем в список чисел.
- Определяем минимальное число в списке. Для этого инициализируем переменную минимального элемента первым числом списка, а затем последовательно сравниваем его со всеми числами, обновляя значение минимального при необходимости.
2. Поиск подходящих пар
- Проходим по списку чисел, формируя пары из соседних элементов. Каждая пара состоит из текущего числа и следующего за ним.
- Проверяем условие для каждой пары: остаток от деления хотя бы одного числа из пары на 16 должен быть равен минимальному элементу списка.
- Если пара удовлетворяет условию, увеличиваем счётчик подходящих пар. Также вычисляем сумму чисел этой пары и, если она превышает текущую максимальную сумму, обновляем значение максимальной суммы.
3. Вывод результата
- После завершения обработки всех пар выводим два значения:
1. Количество пар, которые удовлетворяют заданному условию.
2. Наибольшую сумму среди всех подходящих пар.

2. Демоверсия 2024
В файле содержится последовательность натуральных чисел, каждое из которых не превышает 100 000. Определите количество троек элементов последовательности, в которых ровно два из трёх элементов являются трёхзначными числами, а сумма элементов тройки не больше максимального элемента последовательности, оканчивающегося на 13. Гарантируется, что в последовательности есть хотя бы одно число, оканчивающееся на 13. В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
1. Чтение и запись данных
- Открываем файл 17_2.txt для чтения. Извлекаем каждую строку из файла, удаляем символы новой строки, если они есть, и преобразуем полученные строки в целые числа. Все числа добавляем в список lines.
- Параллельно определяем максимальное число из списка, которое делится на 100 с остатком 13. Если такое число найдено, оно сохраняется в переменной max_end_13.
2. Поиск подходящих троек
- Проходим по списку чисел, формируя тройки соседних элементов: текущий, следующий и через один.
- Для каждой тройки проверяем, сколько из трех чисел являются трехзначными (от 100 до 999 включительно). Если ровно два числа из тройки трехзначные, проверяем, чтобы сумма всех трех чисел была меньше, чем найденное ранее максимальное число max_end_13.
- Если тройка удовлетворяет этим условиям, увеличиваем счетчик подходящих троек. Также вычисляем сумму этой тройки. Если она больше текущего максимального значения суммы, обновляем значение максимальной суммы.
3. Вывод результата
- После завершения перебора всех троек выводим два результата:
o Количество подходящих троек (значение счетчика).
o Наибольшую сумму среди всех подходящих троек.

3. Основная волна 07.06.2024
В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно. Определите количество пар последовательности, в которых остаток от деления на 55 хотя бы одного из элементов равен минимальному элементу последовательности. В ответе запишите количество найденных пар, затем минимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
1. Чтение и запись данных
- Открываем файл 17_3.txt для чтения. Считываем все строки файла в список lines.
- Затем по очереди обрабатываем каждую строку из этого списка: удаляем символ новой строки, преобразуем строку в целое число и добавляем его в список data.
- После этого находим минимальное число в списке data. Для этого изначально берём первый элемент как минимальный и затем сравниваем его с каждым числом в списке, обновляя минимальное значение, если встречаем меньшее число.
2. Поиск подходящих пар
- Начинаем перебирать список чисел, формируя пары из текущего элемента и следующего за ним.
- Для каждой пары проверяем условие: остаток от деления хотя бы одного из чисел пары на 55 должен быть равен минимальному числу, найденному ранее. Если это условие выполняется, фиксируем, что пара подходит.
- Если пара подходит, увеличиваем счётчик подходящих пар. Также вычисляем сумму чисел в этой паре.
- Затем проверяем: если сумма этой пары меньше текущей минимальной суммы, обновляем значение минимальной суммы.
3. Вывод результата
- После завершения обработки всех пар выводим два значения:
o Количество подходящих пар.
o Минимальную сумму среди всех подходящих пар.

4. Основная волна 04.07.2024
В файле содержится последовательность целых чисел. Её элементы могут принимать целые значения от –100 000 до 100 000 включительно. Определите количество пар последовательности, в которых элементы не равны, а абсолютное значение их разности делится на минимальный положительный элемент последовательности, кратный 41. Гарантируется, что такой элемент в последовательности есть.
В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
1. Чтение и запись данных
- Открываем файл 17_4.txt для чтения и считываем все строки файла в список lines.
- Преобразуем каждую строку из списка в целое число (удаляя символы новой строки, если они есть) и добавляем в новый список numbers.
- Из списка numbers определяем наименьшее положительное число, которое делится на 41. Для этого изначально переменная для минимального положительного числа (min_positive) устанавливается как None. Затем перебираем числа, проверяя, являются ли они положительными и делятся ли на 41 без остатка. Если число подходит, обновляем значение min_positive.
2. Поиск подходящих пар
- Перебираем все соседние числа из списка numbers, формируя пары из текущего элемента и следующего за ним.
- Для каждой пары проверяем два условия:
1. Числа пары не равны между собой.
2. Разница модулей чисел пары делится на min_positive без остатка.
- Если пара удовлетворяет этим условиям:
o Увеличиваем счётчик подходящих пар.
o Вычисляем сумму чисел пары.
o Если эта сумма больше текущей максимальной суммы (max_sum), обновляем значение максимальной суммы.
3. Вывод результата
- После обработки всех пар выводим два результата:
1. Общее количество подходящих пар.
2. Максимальную сумму среди всех таких пар.

5. Демоверсия 2023
В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых только одно число оканчивается на 3, а сумма квадратов элементов пары не меньше квадрата максимального элемента последовательности, оканчивающегося на 3. В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
1. Чтение и запись данных
- Открываем файл 17_5.txt для чтения, считываем строки в список lines и преобразуем каждую строку в целое число, добавляя числа в список numbers.
- После формирования списка находим максимальный элемент, который оканчивается на цифру 3. Для этого перебираем все числа, проверяя, заканчивается ли абсолютное значение числа на 3. Если условие выполняется, обновляем максимальный элемент (max_element_with_3).
2. Поиск подходящих пар
- Перебираем соседние числа в списке, формируя пары из текущего элемента и следующего за ним.
- Для каждой пары проверяем:
1. Либо первое число оканчивается на 3, либо второе, но не оба сразу.
2. Сумма квадратов чисел пары должна быть больше либо равна квадрату найденного максимального числа, которое оканчивается на 3.
- Если пара удовлетворяет условиям:
o Увеличиваем счётчик подходящих пар.
o Вычисляем сумму квадратов чисел пары.
o Если сумма квадратов больше текущей максимальной суммы квадратов, обновляем это значение.
3. Вывод результата
- После обработки всех пар выводим два значения:
1. Общее количество пар, удовлетворяющих условиям.
2. Максимальную сумму квадратов чисел среди таких пар.

6. Основная волна 2023 I
В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно. Определите количество троек последовательности, в которых только одно из чисел является четырёхзначным, а сумма элементов тройки не меньше максимального элемента последовательности, оканчивающегося на 15. В ответе запишите количество найденных троек, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
1. Чтение и запись данных
- Открываем файл 17_6.txt для чтения и считываем строки в список lines.
- Преобразуем каждую строку в целое число, удаляя символ новой строки, и добавляем числа в список numbers.
- Находим максимальный элемент в списке, который заканчивается на 15. Для этого перебираем числа из списка, проверяя, заканчиваются ли они на 15. Если число удовлетворяет условию и больше текущего максимального, обновляем значение максимального элемента (max_element_with_15).
2. Поиск подходящих троек
- Перебираем все возможные тройки соседних чисел из списка.
- Для каждой тройки проверяем:
1. Сколько чисел из тройки являются четырёхзначными (от 1000 до 9999 включительно). Подсчитываем такие числа с помощью счётчика.
2. Если ровно одно число в тройке четырёхзначное, проверяем, чтобы сумма чисел тройки была больше либо равна найденному максимальному элементу, заканчивающемуся на 15.
- Если оба условия выполняются:
o Увеличиваем счётчик подходящих троек.
o Вычисляем сумму чисел в тройке. Если эта сумма больше текущей максимальной суммы (max_sum), обновляем значение максимальной суммы.
3. Вывод результата
- После завершения обработки всех троек выводим два значения:
1. Общее количество троек, которые удовлетворяют условиям.
2. Максимальную сумму чисел среди таких троек.

7. Досрочная волна I
В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно. Определите количество пар последовательности, в которых только одно число трёхзначное, и сумма элементов пары кратна минимальному трёхзначному значению последовательности, оканчивающемуся на 5. В ответе запишите два числа: сначала количество найденных пар, затем минимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
1. Чтение и запись данных
- Открываем файл 17_7.txt и считываем все строки в список lines.
- Преобразуем каждую строку из списка в целое число (удаляем символ новой строки) и добавляем в список numbers.
- Находим минимальное трёхзначное число, которое заканчивается на 5. Для этого перебираем все числа из списка, проверяя два условия:
1. Число должно быть трёхзначным (от 100 до 999).
2. Число должно заканчиваться на 5. Если число подходит, обновляем минимальное значение, сравнивая его с текущим минимальным.
2. Поиск подходящих пар
- Перебираем все соседние числа в списке, формируя пары.
- Для каждой пары проверяем:
1. Ровно одно из чисел пары должно быть трёхзначным. Это проверяется отдельно для каждого числа в паре.
2. Сумма чисел пары должна быть кратна минимальному трёхзначному числу, которое заканчивается на 5.
- Если пара удовлетворяет этим условиям:
o Увеличиваем счётчик подходящих пар.
o Вычисляем сумму чисел пары. Если эта сумма меньше текущей минимальной суммы, обновляем значение минимальной суммы.
3. Вывод результата
- После завершения обработки всех пар выводим два значения:
1. Общее количество подходящих пар.
2. Минимальную сумму чисел среди всех таких пар.

8. Демоверсия 2022
В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Например, для последовательности из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4 11
1. Чтение и запись данных
- Открываем файл 17_8.txt и считываем все строки в список lines.
- Каждую строку из списка преобразуем в целое число, удаляя символ новой строки, и добавляем полученные числа в список numbers.
2. Поиск подходящих пар
- Проходим по всем соседним парам чисел в списке.
- Для каждой пары проверяем условие: хотя бы одно из чисел пары должно делиться на 3 без остатка.
- Если пара удовлетворяет условию:
o Увеличиваем счётчик подходящих пар.
o Вычисляем сумму чисел пары и сравниваем её с текущей максимальной суммой.
o Если сумма пары больше текущей максимальной суммы (или если максимальная сумма ещё не установлена), обновляем значение максимальной суммы.
3. Вывод результата
- После завершения обработки всех пар выводим:
1. Общее количество пар, удовлетворяющих условию.
2. Максимальную сумму чисел среди всех таких пар.

Советы для решения задачи 17:
1. Обработка данных:
- Убедитесь, что данные корректно считываются и преобразуются в числа.
- Проверьте, чтобы не выходить за границы списка при работе с соседними элементами.
2. Использование циклов:
- Используйте циклы с индексами, например, for i in range(len(words) - 1), чтобы избежать ошибок выхода за пределы списка.
3. Предварительные вычисления:
- Найдите заранее минимальные или максимальные элементы последовательности, чтобы ускорить проверки внутри цикла.
4. Встроенные функции:
- Используйте функции max, min, списковые включения и другие инструменты Python для сокращения и повышения читаемости кода.
5. Проверка условий:
- Уделите внимание проверке условий задачи, чтобы алгоритм работал корректно.
Удачи на экзамене!