В файле содержится последовательность натуральных чисел.
Её элементы могут принимать целые значения от 1 до 100 000 включительно.
Определите количество троек элементов последовательности, в которых ровно одно число кратно минимальному элементу последовательности, кратному 73, а сумма элементов тройки не меньше максимального элемента последовательности, оканчивающегося на 16.
В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек.
В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
Решение
🔹 Шаг 1. Считываем числа из файла
f = open("17.txt")
nums = [int(x) for x in f]
# 1. минимальный элемент, кратный 73
min_73 = min(x for x in nums if x % 73 == 0)
# 2. максимальный элемент, оканчивающийся на 16
max_16 = max(x for x in nums if abs(x) % 100 == 16)
count = 0
max_sum = -10**9
# 3. проверка троек соседних элементов
for i in range(len(nums) - 2):
a, b, c = nums[i], nums[i + 1], nums[i + 2]
k = sum(x % min_73 == 0 for x in (a, b, c))
if k == 1:
s = a + b + c
if s >= max_16:
count += 1
if s > max_sum:
max_sum = s
# 4. вывод результата
print(count, max_sum)
📌 Что происходит:
Теперь
nums — это вся числовая последовательность.
🔹 Шаг 2. Находим минимальный элемент с нужным делителем
min_73 = min(x for x in nums if x % 73 == 0)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 3. Находим максимальный элемент по условию
max_16 = max(x for x in nums if abs(x) % 100 == 16)
📌 Что происходит: ищем максимальный элемент последовательности с заданным окончанием десятичной записи (по модулю).
🔹 Шаг 4. Подготавливаем переменные для подсчёта
count = 0
max_sum = -10**9
📌 Что означает:
count — количество подходящих пар (или троек);
max_sum — лучший найденный результат (сумма или квадрат суммы), пока неизвестен.
🔹 Шаг 5. Проверяем тройки соседних элементов
for i in range(len(nums) - 2):
a, b, c = nums[i], nums[i + 1], nums[i + 2]
k = sum(x % min_73 == 0 for x in (a, b, c))
if k == 1:
s = a + b + c
if s >= max_16:
count += 1
if s > max_sum:
max_sum = s
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 6. Выводим ответ
print(count, max_sum)
📌 Что выводим: сначала количество найденных пар (или троек), затем второе число из ответа по условию (для этого варианта: 166 278703).