Файл содержит последовательность натуральных чисел, не превышающих 100 000. Назовём тройкой три идущих подряд элемента последовательности.
Определите количество троек, для которых выполняются следующие условия:
— в тройке есть хотя бы два четырёхзначных числа;
— в тройке есть число, последняя цифра которого совпадает с последней цифрой максимального элемента всей последовательности;
— в тройке нет чисел, последняя цифра которых совпадает с последней цифрой минимального элемента всей последовательности.
В ответе запишите два числа: сначала количество найденных троек, затем максимальную величину суммы элементов этих троек.
Ответ:
Приведём решение на языке Python.
a = [int(s) for s in open('17.txt')]
amax = max(a) % 10
amin = min(a) % 10
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]
a_sravni_amin = [x for x in troika if x % 10 == amin]
a_sravni_amax = [x for x in troika if x % 10 == amax]
if len(alen4) >= 2 and len(a_sravni_amin) == 0 and len(a_sravni_amax) > 0:
s3.append(sum(troika))
print(len(s3),max(s3))
В результате работы данного алгоритма при вводе данных из файла ответ — 46 113153.
Ответ: 46 113153.
Приведём решение Бориса Савельева на языке Python.
f = open('17.txt')
a = [int(x) for x in f]
ans = 0
k = 0
for i in range (0,len(a)-2):
b = [a[i],a[i+1],a[i+2]]
k1 = 0
for j in range (0,len(b)):
if len(str(b[j])) == 4:
k1+=1
if k1 >= 2:
if ((a[i]%10==max(a)%10) or (a[i+1]%10==max(a)%10) or (a[i+2]%10==max(a)%10)):
if ((a[i]%10!=min(a)%10) and (a[i+1]%10!=min(a)%10) and (a[i+2]%10!=min(a)%10)):
k+=1
ans=max(ans,(a[i]+a[i+1]+a[i+2]))
print(k,ans)
Приведём решение Ирины Булаховой на языке Python.
with open('17.txt') as f:
a = [int(x) for x in f]
ans = []
a_max = max(a) % 10
a_min = min(a) % 10
for x, y, z in zip(a, a[1:], a[2:]):
if (((1000 <= x < 10000) + (1000 <= y < 10000) + (1000 <= z < 10000) >= 2)
and ((x % 10 == a_max) or (y % 10 == a_max) or (z % 10 == a_max))
and ((x % 10 != a_min) and (y % 10 != a_min) and (z % 10 != a_min))):
ans.append(x + y + z)
print(len(ans), max(ans))
Приведём решение Юрия Красильникова на языке Python.
def good(p,m,M):
t = [1000 <= x < 10000 for x in p]
pc = [str(x)[-1] for x in p]
return sum(t) >= 2 and M in pc and not m in pc
a = [int(s) for s in open('17.txt')]
m = str(min(a))[-1]
M = str(max(a))[-1]
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))

