Задание
В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых хотя бы одно число делится на 3, а сумма элементов пары не более максимального элемента последовательности, кратного 3. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Задание выполняется с использованием прилагаемых файлов. |
Решение с массивом
Алгоритм решения задачи следующий:
- Открыть файл с данными и прочитать их.
- Найти максимальный элемент последовательности кратный 3.
- Перебирая элементы попарно, найти пару у которой:
- делится хотя бы один элемент из пары на 3;
- сумма элементов не более максимального элемента последовательности, кратного 3.
- На основании п. 2, подсчитать количество пар и максимальную сумму пары элементов.
Поскольку нам необходимо найти максимальный элемент кратный 3, а затем эти же значения перебирать попарно, то считаем все элементы последовательности в список. Одновременно с этим будем находить максимальный элемент кратный 3.
with open("17.txt", "r") as f:
s = []
maxs = -10001
for i in f:
s.append(int(i))
if int(i) % 3 == 0:
maxs = max(maxs,int(i))
Попарно перебираем элементы списка и выясняем: делится хотя бы один элемент из пары на 3; сумма элементов не более максимального элемента последовательности, кратного 3. Если условия выполняются, то увеличиваем и счетчик и проверяем сумму - максимальна ли она:
k = 0
sums = 0
for i in range(len(s)-1):
if (s[i] % 3 == 0 or s[i+1] % 3 == 0) and (s[i] + s[i+1]) <= maxs:
k += 1
sums = max(sums,s[i] + s[i+1])
Полный текст программы выглядит следующим образом:
with open("17.txt", "r") as f:
s = []
maxs = -10001
for i in f:
s.append(int(i))
if int(i) % 3 == 0:
maxs = max(maxs,int(i))
k = 0
sums = 0
for i in range(len(s)-1):
if (s[i] % 3 == 0 or s[i+1] % 3 == 0) and (s[i] + s[i+1]) <= maxs:
k += 1
sums = max(sums,s[i] + s[i+1])
print(k, sums)
Ответ: 2439 998.