1706.py

ФИПИ: Задание 17: Обработка числовой последовательности в файле В файле содержится последовательность целых чисел. Её элементы могут принимать целые значения от 1 до 100 000 включительно. Определите количество пар последовательности, в которых хотя бы одно число делится на минимальный элемент последовательности, кратный 21. Гарантируется, что такой элемент в последовательности есть. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
"""
ФИПИ: Задание 17: Обработка числовой последовательности в файле

В файле содержится последовательность целых чисел. 
Её элементы могут принимать целые значения 
от 1 до 100 000 включительно.

Определите количество пар последовательности, 
в которых хотя бы одно число делится 
на минимальный элемент последовательности, 
кратный 21. Гарантируется, что такой элемент 
в последовательности есть.

В ответе запишите количество найденных пар, 
затем максимальную из сумм элементов таких пар. 
В данной задаче под парой подразумевается 
два идущих подряд элемента последовательности.

"""

f = open('1706.txt') # открываем файл
#print(f.readline()) # для проверки

a = [int(s) for s in f] # читаем файл построчно и добавляем в список
#print(a) # для проверки

"""
ПРОВЕРКА УСЛОВИЯ: 
хотя бы одно число делится на минимальный элемент последовательности, кратный 21.
"""

sum_par = [] # список для сумм пар

min21 = min(x for x in a if x % 21 == 0) 

for i in range(len(a) - 1):
    if a[i] % min21 == 0 or a[i+1] % min21 == 0:
        sum_par.append(a[i] + a[i+1])

# другая форма записи:
#sum_par = [a[i] + a[i+1] for i in range(len(a) - 1) if a[i] % min21 == 0 or a[i+1] % min21 == 0]

"""
ВЫВОДИМ ОТВЕТ: КОЛИЧЕСТВО ПАР И МАКСИМАЛЬНУЮ СУММУ ПАР
"""
print(len(sum_par), max(sum_par))
"""
ФИПИ: Задание 17: Обработка числовой последовательности в файле

В файле содержится последовательность целых чисел. 
Её элементы могут принимать целые значения 
от 1 до 100 000 включительно.

Определите количество пар последовательности, 
в которых хотя бы одно число делится 
на минимальный элемент последовательности, 
кратный 21. Гарантируется, что такой элемент 
в последовательности есть.

В ответе запишите количество найденных пар, 
затем максимальную из сумм элементов таких пар. 
В данной задаче под парой подразумевается 
два идущих подряд элемента последовательности.

"""

f = open('1706.txt') # открываем файл
#print(f.readline()) # для проверки

a = [int(s) for s in f] # читаем файл построчно и добавляем в список
#print(a) # для проверки

"""
ПРОВЕРКА УСЛОВИЯ: 
хотя бы одно число делится на минимальный элемент последовательности, кратный 21.
"""

sum_par = [] # список для сумм пар

min21 = min(x for x in a if x % 21 == 0) 

for i in range(len(a) - 1):
    if a[i] % min21 == 0 or a[i+1] % min21 == 0:
        sum_par.append(a[i] + a[i+1])

# другая форма записи:
#sum_par = [a[i] + a[i+1] for i in range(len(a) - 1) if a[i] % min21 == 0 or a[i+1] % min21 == 0]

"""
ВЫВОДИМ ОТВЕТ: КОЛИЧЕСТВО ПАР И МАКСИМАЛЬНУЮ СУММУ ПАР
"""
print(len(sum_par), max(sum_par))

Файлы данных

Репозиторий на GitHub