Теория:
Характеристика задания
1. Тип ответа: два числовых ответа.
2. Структура содержания задания: дан текстовый файл, содержащий числовую информацию.
3. Уровень сложности задания: повышенный.
4. Примерное время выполнения: \(1\)\(4\) минут.
5. Количество баллов: \(1\).
6. Требуется специальное программное обеспечение: среда программирования.
7. Задание проверяет умение составить алгоритм обработки числовой последовательности и записать его в виде простой программы на языке программирования.
Пример задания (демоверсия \(2022\))

Рис. \(1\). Пример задания
Файл: 17.txt.
Что нужно знать?
1. Как считать данные из файла в список.
Для работы с файлом удобно использовать конструкцию with:
with open (file) as f:
инструкции
инструкции
Эта конструкция определяет для открытого файла переменную \(f\) и выполняет набор инструкций. После их выполнения файл автоматически закрывается. Метод readlines()прочитает и вернёт все строки в файле в виде списка.
Для работы с данными файла мы будем использовать следующий программный код:
with open (\('17.txt'\)) as f:
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
2. Основные операторы для работы со списками (массивами).
В Python для того, чтобы работать с большим количеством данных, используется структура данных под названием список. Список представляет собой последовательность (набор) элементов, пронумерованных от \(0\).
Чтобы объявить список, нужно в квадратных скобках перечислить его элементы через запятую:
\(a=[1,2,3,4,5] \)
Элементы списка могут быть разных типов в отличие от элементов массива, но, как правило, используются списки из элементов одного типа.
Методы списков
| \(a.append (x)\) | добавляет элемент \(x\) в конец списка \(a\) |
| \(a.count (x)\) | возвращает количество элементов списка \(a\) со значением \(x\) |
| \(а.sort ()\) | сортирует список \(a\) в порядке возрастания |
| \(а.reverse ()\) | разворачивает список \(a\) в обратном порядке |
| \(a.clear ()\) | очищает список \(a\) |
Функции для работы со списками
| \(len(a)\) | возвращает длину списка \(a\) (количество элементов списка \(a\)) |
| \(min(a)\) | возвращает наименьший элемент списка \(a\) |
| \(max(a)\) | возвращает наибольший элемент списка \(a\) |
| \(sum(a)\) | возвращает сумму элементов списка \(a\) |
Решение задачи можно разбить на этапы.
1. Считать данные из текстового файла в массив (список). Важно, чтобы программа решения и текстовый файл лежали в одной папке (или необходимо указать полный путь для считывания файла).
with open (\('17.txt'\)) as\(f\):
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
2. Необходимо в массиве найти максимальное число, кратное \(3\). Для этого инициализируем пустой массив \(b\). Затем с помощью цикла \(for\) переберём все элементы массива \(a\). Если элемент кратен \(3\), то запишем его в массив \(b\). После выполнения цикла в переменную \(m\) запишем максимальное значение массива \(b\).
\(b=[]\)
for \(i\) in range (\(0,len(a)\)):
if \(a[i]\)%\(3= =0\):
b.append\((a[i])\)
\(m=max(b)\)
for \(i\) in range (\(0,len(a)\)):
if \(a[i]\)%\(3= =0\):
b.append\((a[i])\)
\(m=max(b)\)
3. Определим количество подходящих пар. Для этого очистим массив \(b\). Затем с помощью цикла \(for\) переберём все элементы массива \(a\). Если хотя бы один элемент пары делится на \(3\) и сумма элементов пары не больше \(m\), то запишем эту сумму в массив \(b\).
\(b=[]\)
for \(i\) in range (\(0\),\(len(a)-1\)):
if (\(a[i]\)%\(3= =0\) or \(a[i+1]\)%\(3= =0\)) and (\(a[i]+a[i+1]<=m\)):
b.append (\(a[i]+a[i+1]\))
for \(i\) in range (\(0\),\(len(a)-1\)):
if (\(a[i]\)%\(3= =0\) or \(a[i+1]\)%\(3= =0\)) and (\(a[i]+a[i+1]<=m\)):
b.append (\(a[i]+a[i+1]\))
4. Выведем на экран количество элементов массива \(b\) — оно равно количеству подходящих пар — и максимальную сумму:
print (\(len(b), max(b)\))
Получилась программа:
with open (\('17.txt'\)) as\(f\):
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
\(b=[]\)
for \(i\) in range (\(0,len(a)\)):
if \(a[i]\)%\(3= =0\):
b.append (\(a[i]\))
\(m=max(b)\)
\(a=\) [int(\(x\)) for \(x\) in f.readlines()]
\(b=[]\)
for \(i\) in range (\(0,len(a)\)):
if \(a[i]\)%\(3= =0\):
b.append (\(a[i]\))
\(m=max(b)\)
\(b=[]\)
for \(i\) in range (\(0,len(a)-1\)):
if (\(a[i]\)%\(3= =0\) or \(a[i+1]\)%\(3= =0\)) and (\(a[i]+a[i+1]<=m\)):
b.append (\(a[i]+a[i+1]\))
for \(i\) in range (\(0,len(a)-1\)):
if (\(a[i]\)%\(3= =0\) or \(a[i+1]\)%\(3= =0\)) and (\(a[i]+a[i+1]<=m\)):
b.append (\(a[i]+a[i+1]\))
print (\(len(b), max(b)\))
Ответ: \(2439\) \(998\).