В файле содержится последовательность натуральных чисел, каждое из которых не превышает 100 000. Определите количество троек элементов последовательности, в которых ровно два из трёх элементов являются трёхзначными числами, а сумма элементов тройки не больше максимального элемента последовательности, оканчивающегося
Ответ:
Приведём решение на языке Python.
f = open('17_2024.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 == 13:
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 == 3 and k2 == 3 and k3 != 3) or (k1 == 3 and k2 != 3 and k3 == 3) or (k1 != 3 and k2 == 3 and k3 == 3):
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)
В результате работы данного алгоритма при вводе данных из файла ответ — 959 97471.
Ответ: 959 97471.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Виктории Зиберовой на языке Python.
file=open('17.txt').readlines()
arrnum=[int(c) for c in file]
maxnum=98413
k=0
maxsumma=0
for index in range(0,len(arrnum)-2):
if(arrnum[index]+arrnum[index+1]+arrnum[index+2]<=maxnum) and (((len(str(arrnum[index]))==3) and (len(str(arrnum[index+1]))==3) and (len(str(arrnum[index+2]))!=3)) or ((len(str(arrnum[index]))==3) and (len(str(arrnum[index+1]))!=3) and (len(str(arrnum[index+2]))==3)) or ((len(str(arrnum[index]))!=3) and (len(str(arrnum[index+1]))==3) and (len(str(arrnum[index+2]))==3))):
k+=1
maxsumma=max(arrnum[index]+arrnum[index+1]+arrnum[index+2],maxsumma)
print(k,maxsumma)
Приведём решение Максима Фатихова на языке Python.
f = open('17_2024.txt')
s = [int(x) for x in f]
max_s = max([s[x] for x in range(len(s)) if s[x] % 100 == 13])
count = 0
list_new = []
l = []
for i in range(len(s) - 2):
l = sorted([s[i],s[i + 1],s[i + 2]])
if ((len(str(l[0])) == 3 and len(str(l[1])) == 3 and len(str(l[2])) != 3)
or (len(str(l[1])) == 3 and len(str(l[2])) == 3 and len(str(l[0])) != 3)
or (len(str(l[2])) == 3 and len(str(l[0])) == 3 and len(str(l[1])) != 3)) \
and (l[2] + l[1] + l[0]) <= max_s:
list_new.append(l[2] + l[1] + l[0])
print(len(list_new),max(list_new))
Приведём решение Владимира Иванова на языке Python.
f=open('17_2024.txt')
a=[int(i) for i in f]
mx13=max([i for i in a if i%100==13])
c=mx=0
for i in range(len(a)-2):
t=0
if len(str(a[i]))==3:t+=1
if len(str(a[i+1]))==3:t+=1
if len(str(a[i+2]))==3:t+=1
if t==2 and a[i]+a[i+1]+a[i+2]<=mx13:
c+=1
mx=max(mx, a[i]+a[i+1]+a[i+2])
print(c, mx)
Приведём решение Дмитрий Альцев на языке Python.
f = open('17_2024.txt')
a = [int(i) for i in f]
s = 0
mx = 0
p = 0
def f(a,b,c):
m = [len(str(a)),len(str(b)),len(str(c))]
return m.count(3)
for b in range(len(a)):
if a[b] % 100 == 13:
p = max(p, a[b])
for i in range(len(a) - 2):
if (f(a[i],a[i+1],a[i+2]) == 2) and ((a[i] + a[i+1] + a[i+2]) <= p):
s += 1
mx = max(mx,(a[i] + a[i+1] + a[i+2]))
print(s,mx)
Приведём решение Юрия Красильникова на языке Python.
a = [int(s) for s in open('17_2024.txt')]
max13 = max([x for x in a if x%100==13])
b = [sum(a[i:i+3]) for i in range(len(a)-2) if sum([100 <= x < 1000 for x in a[i:i+3]])==2 and sum(a[i:i+3]) <= max13]
print(len(b),max(b))

