Файл содержит последовательность натуральных чисел, не превышающих 100 000. Назовём тройкой три идущих подряд элемента последовательности.
Определите количество троек, для которых выполняются следующие условия:
— в тройке есть четырёхзначные числа;
— в тройке не более одного числа, у которого остаток от деления на 5 равен остатку от деления на 5 максимального элемента всей последовательности;
— в тройке не менее двух чисел, у которых остаток от деления на 7 равен остатку от деления на 7 минимального элемента всей последовательности.
В ответе запишите два числа: сначала количество найденных троек, затем максимальную величину суммы элементов этих троек.
Ответ:
Приведём решение на языке Python.
a = [int(s) for s in open('17.txt')]
amax5 = max(a) % 5
amin7 = min(a) % 7
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]
a5 = [x for x in troika if x % 5 == amax5]
a7 = [x for x in troika if x % 7 == amin7]
if len(a5) <= 1 and len(a7) >= 2 and len(alen4) > 0:
s3.append(sum(troika))
print(len(s3),max(s3))
Ответ: 120 194137.
Приведём решение Бориса Савельева на языке Python.
f=open('17.txt')
a=[int(x) for x in f]
xmin7=min(a)%7
xmax5=max(a)%5
k=0
summ=0
for i in range (0,len(a)-2):
if len(str(a[i]))==4 or len(str(a[i+1]))==4 or len(str(a[i+2]))==4:
if (a[i]%5!=xmax5 and a[i+1]%5!=xmax5 and a[i+2]%5!=xmax5) or (a[i]%5==xmax5 and a[i+1]%5!=xmax5 and a[i+2]%5!=xmax5) or (a[i]%5!=xmax5 and a[i+1]%5==xmax5 and a[i+2]%5!=xmax5) or (a[i]%5!=xmax5 and a[i+1]%5!=xmax5 and a[i+2]%5==xmax5):
if (a[i]%7==xmin7 and a[i+1]%7==xmin7 and a[i+2]%7!=xmin7) or (a[i]%7!=xmin7 and a[i+1]%7==xmin7 and a[i+2]%7==xmin7) or (a[i]%7==xmin7 and a[i+1]%7!=xmin7 and a[i+2]%7==xmin7) or (a[i]%7==xmin7 and a[i+1]%7==xmin7 and a[i+2]%7==xmin7):
k+=1
summ=max(a[i]+a[i+1]+a[i+2],summ)
print(k,summ)
Приведём решение Егора Чернецова на языке Python.
a = list(map(int, open('17.txt')))
mx = max(a) % 5
mn = min(a) % 7
k = best = 0
for i in range(len(a)-2):
t = a[i:i+3]
if any(1000 <= x <= 9999 for x in t) \
and sum(x%5==mx for x in t) <= 1 \
and sum(x%7==mn for x in t) >= 2:
k += 1
best = max(best, sum(t))
print(k, best)
Приведём решение Ивана Свербихина на языке Python.
f = list(map(int, open('17.txt').read().split('\n')[:-1]))
res = []
a = min([i for i in f])
a1 = max([i for i in f])
for i in range(len(f) - 2):
para = [f[i], f[i + 1], f[i + 2]]
c = 0
k = 0
m = 0
for j in para:
if len(str(abs(j))) == 4:
c += 1
if j % 5 == a1 % 5:
k += 1
if j % 7 == a % 7:
m += 1
if c != 0 and k <= 1 and m >= 2:
res.append(sum(para))
print(len(res), max(res))
Приведём решение Юрия Красильникова на языке 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))

