Файл содержит последовательность натуральных чисел, не превышающих 100 000. Назовём тройкой три идущих подряд элемента последовательности.
Определите количество троек, для которых выполняются следующие условия:
— ровно два числа в тройке четырёхзначные;
— хотя бы одно число в тройке делится
— сумма элементов тройки больше максимального элемента последовательности, запись которого заканчивается
В ответе запишите два числа: сначала количество найденных троек, затем максимальную величину суммы элементов этих троек.
Ответ:
Приведём решение на языке Python.
f = open('17.txt')
s = f.readlines()
for i in range(len(s)):
s[i] = int(s[i])
count = 0
maxi = 0
maxsum = 0
for i in range(len(s)):
if abs(s[i]) % 100 == 19:
maxi = max(maxi, s[i])
for i in range(2, len(s)):
k1 = 0
k2 = 0
k3 = 0
c1 = abs(s[i-2])
c2 = abs(s[i-1])
c3 = abs(s[i])
while c1 > 0:
k1 += 1
c1 //= 10
while c2 > 0:
k2 += 1
c2 //= 10
while c3 > 0:
k3 += 1
c3 //= 10
if (k1 == 4 and k2 == 4 and k3 != 4) or (k1 == 4 and k2 != 4 and k3 == 4) or (k1 != 4 and k2 == 4 and k3 == 4):
if s[i] % 3 == 0 or s[i-1] % 3 == 0 or s[i-2] % 3 == 0:
if s[i-2] + s[i-1] + s[i] > maxi:
count += 1
maxsum = max(maxsum, s[i-2] + s[i-1] + s[i])
print(count, maxsum)
В результате работы данного алгоритма при вводе данных из файла ответ —
Ответ: 78 115 709.
Приведём решение Ильи Андрианова на языке Python.
M = [int(x) for x in open('17.txt')]
MAXI = max([x for x in M if abs(x) % 100 == 19])
count = 0
maxi = -99999
for i in range(len(M)-2):
a, b, c = M[i], M[i+1], M[i+2]
# A = [len(str(abs(a))) == 4, len(str(abs(b))) == 4, len(str(abs(c))) == 4]
A = [len(str(abs(x))) == 4 for x in [a, b, c]]
if sum(A) == 2:
# if a % 3 == 0 or b % 3 == 0 or c % 3 == 0:
if any(x % 3 == 0 for x in [a, b, c]):
if (a + b + c) > MAXI:
count += 1
maxi = max(maxi, a + b + c)
print(count, maxi)
Приведём решение Михаила Глинского на языке Python.
f=open('171.txt')
r=[]
m=[int(x) for x in f]
m19=[x for x in m if x%100==19]
mm19=max(m19)
for x in range (len(m)-2):
k4=0
if 999 < m[x] < 10000:
k4+=1
if 999 if 999 < m[x+2] < 10000: k4+=1 if k4==2: if m[x]%3==0 or m[x+1]%3==0 or m[x+2]%3==0: if (m[x]+m[x+1]+m[x+2]) > mm19: r.append(m[x]+m[x+1]+m[x+2]) print(len(r),max(r))

