Файл содержит последовательность натуральных чисел, не превышающих 100 000. Назовём тройкой три идущих подряд элемента последовательности.
Определите количество троек, для которых выполняются следующие условия:
— в тройке есть четырёхзначные числа;
— в тройке не более одного числа, у которого остаток от деления на 5 равен остатку от деления на 5 минимального элемента всей последовательности;
— в тройке не менее двух чисел, у которых остаток от деления на 7 равен остатку от деления на 7 максимального элемента всей последовательности.
В ответе запишите два числа: сначала количество найденных троек, затем максимальную величину суммы элементов этих троек.
Ответ:
Приведём решение на языке Python.
a = [int(s) for s in open('17.txt')]
amax7 = max(a) % 7
amin5 = min(a) % 5
s3 = []
for i in range (len(a) - 2):
troika = [a[i] , a[i+1] , a[i+2]]
alen4 = [x for x in troika if len(str(x)) == 4]
a7 = [x for x in troika if x % 7 == amax7]
a5 = [x for x in troika if x % 5 == amin5]
if len(a5) <= 1 and len(a7) >= 2 and len(alen4) > 0:
s3.append(sum(troika))
print(len(s3),max(s3))
Ответ: 103 194888.
Приведём решение Юрия Красильникова на языке Python.
def good(p,m,M):
t = [1000 <= x < 10000 for x in p]
t5 = [x%5 == m%5 for x in p]
t7 = [x%7 == M%7 for x in p]
return any(t) and sum(t5) <= 1 and sum(t7) >= 2
a = [int(s) for s in open('17.txt')]
m = min(a)
M = max(a)
r = [sum(a[i-2:i+1]) for i in range(2,len(a)) if good(a[i-2:i+1],m,M)]
print(len(r),max(r))

