Теория:

Характеристика задания

1. Тип ответа: два числовых ответа.

2. Структура содержания задания: дан текстовый файл, содержащий числовую информацию.

3. Уровень сложности задания: повышенный.

4. Примерное время выполнения: \(1\)\(4\) минут.

5. Количество баллов: \(1\).

6. Требуется специальное программное обеспечение: среда программирования.

7. Задание проверяет умение составить алгоритм обработки числовой последовательности и записать его в виде простой программы на языке программирования.
 
Пример задания (демоверсия \(2022\))
 
демо1.png
Рис. \(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()]
 
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()]
 
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)\)
 
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]\))
 
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)\)
 
\(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]\))
 
print (\(len(b), max(b)\))
 
Ответ: \(2439\)   \(998\).