455) В файле 17-449.txt содержится последовательность целых чисел. Её элементы могут принимать целые значения от -100 000 до 100 000 включительно. Определите количество троек элементов последовательности, в которых ровно одно число не является отрицательным, а сумма элементов тройки не больше максимального элемента последовательности, в десятичной записи которого содержится 38. В ответе запишите количество найденных троек, затем максимальную из тех сумм элементов таких троек, десятичная запись которых начинается на 38. В данной задаче под тройкой подразумеваются три идущих подряд элемента последовательности.
def one_pol(x, y, z):
mas = [x, y, z]
k = 0
for i in mas:
if i >= 0:
k += 1
if k == 1:
return True
else:
return False
def z38(n):
s = str(n)
if s.count("38") > 0:
return True
else:
return False
def begin38(n):
s = str(abs(n))
if s[0:2] == "38":
return True
else:
return False
with open("17-449.txt", "r") as f:
a = [int(i) for i in f.readlines()]
m38 = -100000
k = 0
max3 = -300000
for n in a:
if z38(n) and n > m38:
m38 = n
for i in range(len(a) - 3):
if a[i] + a[i + 1] + a[i + 2] <= m38 and one_pol(a[i], a[i + 1], a[i + 2]):
k+=1
if begin38(a[i] + a[i + 1] + a[i + 2]) and a[i] + a[i + 1] + a[i + 2] > max3:
max3 = a[i] + a[i + 1] + a[i + 2]
print(k, max3)
431) В файле 17-428.txt содержится последовательность натуральных чисел, не превышающих 100 000. Определите количество троек элементов последовательности, для которых выполняются следующие условия:
- в тройке есть трёхзначные числа;
- в тройке не более одного числа, у которого сумма цифр равна сумме цифр 13-го по счёту
элемента последовательности, делящегося на 13;
- в тройке не менее двух чисел, у которых сумма цифр равна сумме цифр 25-го по счёту
элемента последовательности, делящегося на 25.
def sumZif(n):
sum = 0
while n > 0:
sum += n % 10
n //= 10
return sum
def countF(x, y, z, Par):
k = 0
q = [x, y, z]
for i in q:
if sumZif(i) == sumZif(Par):
k+=1
return k
def f3(x, y, z):
k = 0
q = [x, y, z]
for i in q:
if 99 < abs(i) < 1000:
k+=1
return k
with open("17-428.txt", "r") as f:
a = []
l = 0
n = 0
while True:
s = f.readline()
if not s:
break
else:
a.append(int(s))
if int(s) % 13 == 0 and l < 13:
a13 = int(s)
l+=1
if int(s) % 25 == 0 and n < 25:
a25 = int(s)
n += 1
k = 0
sum = 0
N = len(a)
for i in range(N-3):
if f3(a[i], a[i + 1], a[i + 2])>0 and countF(a[i], a[i + 1], a[i + 2],a25) > 1:
sum+=(a[i] + a[i + 1] + a[i + 2])
k+=1
print(k, round(sum / k))
432) В файле 17-432.txt содержится последовательность целых чисел, не превышающих по модулю 100 000. Определите количество троек элементов последовательности, в которых произведение максимального и минимального элементов тройки больше суммы всех отрицательных элементов последовательности. В ответе запишите количество найденных троек, затем абсолютное значение максимальной из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
with open("17-432.txt", "r") as f:
a = [int(i) for i in f.readlines()]
s = 0
k = 0
s = sum(x for x in a if x < 0)
max3 = -300000
for i in range(len(a) - 2):
if max(a[i], a[i + 1], a[i + 2]) * min(a[i], a[i + 1], a[i + 2]) > s:
k += 1
if max3 < a[i] + a[i + 1] + a[i + 2]:
max3 = a[i] + a[i + 1] + a[i + 2]
print(k, abs(max3))
433) (Открытый вариант-2025) В файле 17-433.txt содержится последовательность целых чисел, не превышающих по модулю 100 000. Определите количество троек последовательности, в которых все числа одного знака, при этом произведение минимального и максимального элементов тройки больше квадрата минимального элемента последовательности, который оканчивается на 15 и является трёхзначным числом. В ответе запишите количество найденных троек чисел, затем минимальное из произведений максимального и минимального элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
with open("17-433.txt", "r") as f:
a = [int(i) for i in f.readlines()]
def z(x, y, z):
m = [x, y, z]
k = 0
l = 0
for i in m:
if i > 0:
k += 1
if i < 0:
l += 1
if k == 3 or l == 3:
return True
else:
return False
min0 = 100000
for x in a:
if abs(x) % 100 == 15 and 99 < abs(x) < 1000 and min0 > x:
min0 = x
k = 0
print(min0)
minp = 10000000000
for i in range(len(a) - 2):
if z(a[i], a[i + 1], a[i + 2]) and max(a[i], a[i + 1], a[i + 2]) * min(a[i], a[i + 1], a[i + 2]) > min0 ** 2:
k+=1
if max(a[i], a[i + 1], a[i + 2]) * min(a[i], a[i + 1], a[i + 2]) < minp:
minp = max(a[i], a[i + 1], a[i + 2]) * min(a[i], a[i + 1], a[i + 2])
print(k, minp)