Файл содержит последовательность натуральных чисел, не превышающих 100 000. Назовём четвёркой четыре идущих подряд элемента последовательности.
Определите количество четвёрок, для которых выполняются следующие условия:
— в четвёрке есть хотя бы два пятизначных числа и хотя бы одно не пятизначное;
— в четвёрке больше чисел,
— сумма элементов четвёрки больше максимального элемента последовательности, запись которого заканчивается
В ответе запишите два числа: сначала количество найденных четвёрок, затем максимальную величину суммы элементов этих четвёрок.
Ответ:
Приведём решение на языке Python.
a = [int(s) for s in open('17.txt')]
a538 = max([x for x in a if x % 1000 == 538])
s4 = []
for i in range (len(a) - 3):
cetverka = [a[i] , a[i+1] , a[i+2], a[i+3]]
a5 = [x for x in cetverka if len(str(x)) >= 5]
anot5 = [x for x in cetverka if len(str(x)) != 5]
a3 = [x for x in cetverka if x % 3 == 0]
a7 = [x for x in cetverka if x % 7 == 0]
if len(a5) >= 2 and len(anot5) >= 1:
if len(a3) > len(a7):
if sum(cetverka) > a538 and sum(cetverka) < a538*2:
s4.append(sum(cetverka))
print(len(s4),max(s4))
В результате работы данного алгоритма при вводе данных из файла ответ — 260 106865.
Ответ: 260 106865.
Приведём решение Юрия Красильникова на языке Python.
def good(p,m):
t = [10000 <= abs(x) < 100000 for x in p]
k3 = [x%3 == 0 for x in p]
k7 = [x%7 == 0 for x in p]
return 2 <= sum(t) <= 3 and sum(k3) > sum(k7) and m < sum(p) < 2*m
a = [int(s) for s in open('17.txt')]
m = max([x for x in a if str(x)[-3:] == '538'])
r = [sum(a[i-3:i+1]) for i in range(3,len(a)) if good(a[i-3:i+1],m)]
print(len(r),max(r))

