(А. Богданов) В файле содержится последовательность целых чисел, не превышающих 1000.
Определите количество пар последовательности, в которых только одно число находится между значениями минимального кратного 37 и максимального кратного 73.
Гарантируется, что такая пара в последовательности есть.
В ответе запишите количество найденных пар и минимальную сумму элементов среди таких пар.
В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Решение
🔹 Шаг 1. Считываем числа из файла
f = open("17.txt")
nums = [int(x) for x in f]
# 1. минимальное кратное 37 и максимальное кратное 73
min_37 = min(x for x in nums if x % 37 == 0)
max_73 = max(x for x in nums if x % 73 == 0)
lo = min(min_37, max_73)
hi = max(min_37, max_73)
count = 0
min_sum = 10**18
# 2. проверка пар соседних элементов
for i in range(len(nums) - 1):
a, b = nums[i], nums[i + 1]
inside = sum(lo < x < hi for x in (a, b))
if inside == 1:
count += 1
s = a + b
if s < min_sum:
min_sum = s
# 3. вывод результата
print(count, min_sum)
📌 Что происходит:
Теперь
nums — это вся числовая последовательность.
🔹 Шаг 2. Находим минимальный элемент с нужным делителем
min_37 = min(x for x in nums if x % 37 == 0)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 3. Находим максимальный элемент по условию
max_73 = max(x for x in nums if x % 73 == 0)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 4. Задаём границы интервала между опорными значениями
lo = min(min_37, max_73)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 5. Задаём верхнюю границу интервала
hi = max(min_37, max_73)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 6. Подготавливаем переменные для подсчёта
count = 0
min_sum = 10**18
📌 Что означает:
count — количество подходящих пар (или троек);
max_sum — лучший найденный результат (сумма или квадрат суммы), пока неизвестен.
🔹 Шаг 7. Проверяем пары соседних элементов
for i in range(len(nums) - 1):
a, b = nums[i], nums[i + 1]
inside = sum(lo < x < hi for x in (a, b))
if inside == 1:
count += 1
s = a + b
if s < min_sum:
min_sum = s
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 8. Выводим ответ
print(count, min_sum)
📌 Что выводим: сначала количество найденных пар (или троек), затем второе число из ответа по условию (для этого варианта: 136 574).