(Р.Косов ITец) В файле содержится последовательность целых чисел.
Её элементы могут принимать целые значения от -100 000 до 100 000 включительно.
Определите количество троек последовательности, в которых нет трехзначных чисел, а сумма элементов тройки более чем в 2 раза превышает сумму максимального трехзначного и минимального трехзначного элементов последовательности.
В ответе запишите количество найденных троек, затем - наименьшую из сумм такой тройки.
В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
Решение
🔹 Шаг 1. Считываем числа из файла
f = open("17_1.txt")
nums = [int(x) for x in f]
# 1. максимальное и минимальное трёхзначные числа последовательности
max_3 = max(x for x in nums if 100 <= abs(x) <= 999)
min_3 = min(x for x in nums if 100 <= abs(x) <= 999)
count = 0
min_sum = 10**18
# 2. проверка троек соседних элементов
for i in range(len(nums) - 2):
a, b, c = nums[i], nums[i + 1], nums[i + 2]
if any(100 <= abs(x) <= 999 for x in (a, b, c)):
continue
s = a + b + c
if s > 2 * (max_3 + min_3):
count += 1
if s < min_sum:
min_sum = s
# 3. вывод результата
print(count, min_sum)
📌 Что происходит:
Теперь
nums — это вся числовая последовательность.
🔹 Шаг 2. Находим максимальное трёхзначное число
max_3 = max(x for x in nums if 100 <= abs(x) <= 999)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 3. Находим минимальное трёхзначное число
min_3 = min(x for x in nums if 100 <= abs(x) <= 999)
📌 Что происходит: по условию вычисляем опорное значение по всей последовательности (минимум или максимум с нужным свойством).
🔹 Шаг 4. Подготавливаем переменные для подсчёта
count = 0
min_sum = 10**18
📌 Что означает:
count — количество подходящих пар (или троек);
max_sum — лучший найденный результат (сумма или квадрат суммы), пока неизвестен.
🔹 Шаг 5. Проверяем тройки соседних элементов
for i in range(len(nums) - 2):
a, b, c = nums[i], nums[i + 1], nums[i + 2]
if any(100 <= abs(x) <= 999 for x in (a, b, c)):
continue
s = a + b + c
if s > 2 * (max_3 + min_3):
count += 1
if s < min_sum:
min_sum = s
📌 Что происходит: перебираем соседние пары (s[i], s[i+1]), проверяем условие и обновляем count и максимальную сумму (или квадрат суммы).
🔹 Шаг 6. Выводим ответ
print(count, min_sum)
📌 Что выводим: сначала количество найденных пар (или троек), затем второе число из ответа по условию (для этого варианта: 2474 90).