В файле записана последовательность натуральных чисел. Гарантируется, что все числа различны. Ребята из этой последовательности захотели выбрать четыре числа, чтобы их сумма делилась на 6 и была максимально возможной. Определите максимальную сумму, которую можно при этом получить.
Входные данные: Даны два входных файла(файл А и файл В), каждый из которых содержит в первой строке количество чисел N . Каждая из следующих N строк содержит одно натуральное число, не превышающее
.
Пример входного файла:
6
905
573
971
947
742
644
Наибольшая из сумм — 3396.
В ответе укажите два числа через пробел: сначала искомое значение для файла А, затем для файла В.
Для А
from itertools import combinations # с помощью combinations из модуля itertools можно удобно брать пары чисел при этом не печатая два цикла
f = open(’27-11a.txt’)
mx = 0
n = int(f.readline())
a = [int(x) for x in f]#список всех чисел в файле
for w,x,y,z in combinations(a,4):#эта строчка заменяет 4 строчки циклов
if (w+x+y+z) % 6 == 0:#если сумма чисел кратна 6,то она нам подходит
mx = max(mx,w+x+y+z)#сравниваем с максимумом
print(mx)
Для Б
# Это решение основанно на одном простом свойстве делимости:
# сумма чисел кратна числу если сумма их остатков от деления на число кратно числу
# Считываем файл, сортируем по убыванию список всех чисел в файле,
# поскольку нас интересует максимальная сумма
a = sorted([int(x) for x in open(’27-11b.txt’)][1:])[::-1]
d = [] # список, в котором будут храниться подходящие нам числа
for j in range(6): # перебор всевозможных остатков при делении на 6
for x in a:
# если остаток x от деления на 6 равен j,
# то мы добавляем это число в список
if x % 6 == j:
d += [x]
if len([x for x in d if x % 6 == j]) == 4:
break
# условием прерывания сбора подходящих нам чисел служит то,
# что в списке есть 4 числа с одним и тем же остатком при делении на 6,
# именно 4 потому что в задаче мы должны взять ровно 4 числа
mx = 0
for x in range(len(d) - 3):
for y in range(x + 1, len(d) - 2):
for z in range(y + 1, len(d) - 1):
for w in range(z + 1, len(d)):
# 4 цикла, с помощью которых мы будем рассматривать
# все возможные четверки в нашем списке d
if (d[x] + d[y] + d[z] + d[w]) % 6 == 0:
mx = max(mx, (d[x] + d[y] + d[z] + d[w]))
print(mx)