(Э. Носиров) Файл 17.txt содержит 10 000 целых чисел от −100 000 до 100 000.
Пусть M — наибольший положительный двузначный элемент последовательности, оканчивающийся на 7.
Гарантируется, что он существует.
Найдите количество пар соседних элементов, для которых одновременно выполнены условия:
• элементы имеют одинаковую чётность;
• ровно один элемент является четырёхзначным по модулю, то есть 1000 ≤ |a| ≤ 9999;
• сумма элементов кратна M.
В ответе запишите количество пар, затем наибольшую сумму элементов подходящей пары.
В данной задаче парой называются два идущих подряд элемента последовательности.
Пары могут пересекаться.
Решение
🔹 Шаг 1. Считываем числа из файла
f = open("17.txt")
nums = [int(x) for x in f]
# 1. max_7 — наибольший положительный двузначный элемент, оканчивающийся на 7
max_7 = max(x for x in nums if 10 <= x <= 99 and x % 10 == 7)
count = 0
max_sum = -10**18
# 2. проверка пар соседних элементов
for i in range(len(nums) - 1):
a, b = nums[i], nums[i + 1]
if a % 2 != b % 2:
continue
four = (1000 <= abs(a) <= 9999) + (1000 <= abs(b) <= 9999)
if four != 1:
continue
s = a + b
if s % max_7 == 0:
count += 1
if s > max_sum:
max_sum = s
# 3. вывод результата
print(count, max_sum)
📌 Что происходит:
Теперь
nums — это вся числовая последовательность.
🔹 Шаг 2. Находим максимальный элемент по условию
max_7 = max(x for x in nums if 10 <= x <= 99 and x % 10 == 7)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 3. Подготавливаем переменные для подсчёта
count = 0
max_sum = -10**18
📌 Что означает:
count — количество подходящих пар (или троек);
max_sum — лучший найденный результат (сумма или квадрат суммы), пока неизвестен.
🔹 Шаг 4. Проверяем пары соседних элементов
for i in range(len(nums) - 1):
a, b = nums[i], nums[i + 1]
if a % 2 != b % 2:
continue
four = (1000 <= abs(a) <= 9999) + (1000 <= abs(b) <= 9999)
if four != 1:
continue
s = a + b
if s % max_7 == 0:
count += 1
if s > max_sum:
max_sum = s
📌 Что происходит: перебираем соседние пары (s[i], s[i+1]), проверяем условие и обновляем count и максимальную сумму (или квадрат суммы).
🔹 Шаг 5. Выводим ответ
print(count, max_sum)
📌 Что выводим: сначала количество найденных пар (или троек), затем второе число из ответа по условию (для этого варианта: 6 40934).