№17

В файле содержится последовательность из 10000 целых положительных чисел. Каждое число не превышает 10000. Определите и запишите в ответе сначала количество пар элементов последовательности, у которых сумма элементов кратна 80 и хотя бы один элемент из пары делится на 50, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.
Источник: ссылка

Для решения этой задачи нам необходимо прочитать файл. Инициализируем 2 переменные для количества и максимальной суммы соответственно и начинаем перебирать пары. Проверяем каждую на выполнение условия.

Рекомендую взять всё условие в скобки. Также нужно научиться различать типы пар. В 17-х встречаются разные виды пар:
  • Идущие друг за другом последовательно
  • Все возможные пары
В данном конкретном случае у нас второй вид пар, так как есть пояснение “в данной задаче под парой подразумевается два различных элемента последовательности”. Необходимо запомнить границы перебора для обоих циклов! На сайте РЕШУЕГЭ даны решения, где для первого и второго числа в паре не вводили отдельные переменные (у меня они называются a и b). Я рекомендую их всё-таки ввести, потому что это повышает читабельность кода и ускоряет его написание.
Также вот такие задания, где нужно перебрать все комбинации, могут долго вычисляться. Конкретно это у меня посчиталось мгновенно, но так бывает не всегда. Оно вполне может считать целую минуту!
#Задание 17
#Открываем файл
f = open(r"/home/artyom/Downloads/17.txt", 'r', encoding="utf-8")
#Заполняем массив ЦЕЛЫМИ из каждой строки
mas = [int(i) for i in f.readlines()]
f.close() #Закрываем open

k = mx = 0
#Перебираем все возможные пары элементов в файле
for i in range(len(mas) - 1):
    for j in range(i + 1, len(mas)):
        a = mas[i] #Первое число в паре
        b = mas[j] #Второе число в паре

        if (((a + b) % 80 == 0) and (a % 50 == 0 or b % 50 == 0)):
            k += 1
            mx = max(mx, a + b)
print(k, mx)