Файл содержит последовательность натуральных чисел, не превышающих 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]]
alen5 = [x for x in troika if len(str(x)) == 5]
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(alen5) <= 1 and len(a_sravni_amin) >= 1 and len(a_sravni_amax) == 0:
s3.append(sum(troika))
print(len(s3),max(s3))
В результате работы данного алгоритма при вводе данных из файла ответ — 55 113955.
Ответ: 55 113955.
Приведём решение Михаила Глинского на языке Python.
s=open('17.txt').readlines()
m=[int(x) for x in s]
r=[]
maxi=(max(m))%10
mini=(min(m))%10
for i in range(len(m)-2):
k5=0
if 9999 < m[i] < 100000:
k5+=1
if 9999 < m[i+1] < 100000:
k5+=1
if 9999 < m[i+2] < 100000:
k5+=1
if k5 <= 1:
if m[i]%10==mini or m[i+1]%10==mini or m[i+2]%10==mini:
if not(m[i]%10==maxi or m[i+1]%10==maxi or m[i+2]%10==maxi):
r.append(m[i+1]+m[i+2]+m[i])
print(len(r),max(r))
Приведём решение Бориса Савельева на языке Python.
f=open('17.txt')
a=[int(x) for x in f]
mini=min(a)%10
maxi=max(a)%10
k=0
ans=0
for i in range (0,len(a)-2):
if (len(str(a[i]))!=5 and len(str(a[i+1]))!=5 and len(str(a[i+2]))!=5) or (len(str(a[i]))==5 and len(str(a[i+1]))!=5 and len(str(a[i+2]))!=5) or (len(str(a[i]))!=5 and len(str(a[i+1]))==5 and len(str(a[i+2]))!=5) or (len(str(a[i]))!=5 and len(str(a[i+1]))!=5 and len(str(a[i+2]))==5):
if a[i]%10==mini or a[i+1]%10==mini or a[i+2]%10==mini:
if a[i] % 10 != maxi and a[i + 1] % 10 != maxi and a[i + 2] % 10 != maxi:
k+=1
ans=max(ans,a[i]+a[i+1]+a[i+2])
print(k,ans)
Приведём решение Юрия Красильникова на языке Python.
def good(p,m,M):
t = [10000 <= abs(x) < 100000 for x in p]
pc = [str(x)[-1] for x in p]
return sum(t) <= 1 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))

