В файле содержится последовательность целых чисел. Её элементы могут принимать целые значения от −100 000 до 100 000
включительно.
Определите количество троек последовательности, в которых все числа одного знака, при этом произведение минимального и максимального элементов тройки больше квадрата минимального элемента последовательности, который оканчивается на 15 и является трёхзначным числом.
В ответе запишите количество найденных троек чисел, затем минимальное из произведений максимального и минимального элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
Ответ:
Приведём решение на языке Python.
a = [int(s) for s in open('1_17.txt')]
amin15 = min([i for i in a if (99< abs(i) <1000) and (abs(i)%100==15)])
otv=[]
for i in range (len(a) - 2):
troika = [a[i] , a[i+1] , a[i+2]]
trplus = [x for x in troika if x >= 0]
trminus = [x for x in troika if x < 0]
if len(trplus) == 3 or len(trminus) == 3:
if min(troika) * max(troika) > amin15**2:
otv.append(min(troika) * max(troika))
print(len(otv), min(otv))
В результате работы данного алгоритма при вводе данных из файла ответ — 3507 863808.
Ответ: 3507 863808.
Приведём решение Юрия Красильникова на языке Python.
def подходит(тройка,мин15):
плюсы = [x >= 0 for x in тройка]
return sum(плюсы) in (0,3) and max(тройка) * min(тройка) > мин15**2
числа = [int(строка) for строка in open('1_17.txt')]
мин15 = min([x for x in числа if 100 <= abs(x) < 1000 and abs(x) % 100 == 15])
результаты = [min(числа[i:i+3]) * max(числа[i:i+3]) for i in range(len(числа) - 2) if подходит(числа[i:i+3],мин15)]
print(len(результаты),min(результаты))
Приведём решение Бориса Савельева на языке Python.
f=open('1_17.txt')
a=[int(x) for x in f]
mini=10**10
answ=(10**10)
for i in range (0,len(a)):
if len(str(abs(a[i])))==3 and abs(a[i])%100==15:
mini=min(mini,a[i])
k=0
for i in range (0,len(a)-2):
if (a[i]>0 and a[i+1]>0 and a[i+2]>0) or (a[i]<0 and a[i+1]<0 and a[i+2]<0):
if max(a[i],a[i+1],a[i+2])*min(a[i],a[i+1],a[i+2])>mini**2:
k+=1
answ=min(answ,max(a[i],a[i+1],a[i+2])*min(a[i],a[i+1],a[i+2]))
print(k, answ)

