Файл содержит последовательность натуральных чисел, не превышающих 20 000. Назовём парой два идущих подряд элемента последовательности.
Определите количество пар, для которых выполняются следующие условия:
— ровно одно число в паре четырёхзначное;
— сумма квадратов элементов пары без остатка делится на наименьшее в последовательности трёхзначное число, запись которого заканчивается
В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар.
Ответ:
Приведём решение на языке Python.
f = open('17.txt')
s = [int(i) for i in f]
count = 0
maxi = 0
tripat = 20001
for i in range(len(s)):
if str(s[i])[-1] =='5':
if 99 < abs(s[i]) <1000:
tripat = min (tripat, s[i])
for i in range(len(s)-1):
if ((999 < abs(s[i]) <10000) and not(999 < abs(s[i+1]) <10000)) or (not(999 < abs(s[i]) <10000) and (999 < abs(s[i+1]) <10000)):
if (s[i] ** 2 + s[i+1] ** 2) % tripat == 0:
count += 1
maxi = max (maxi, s[i] ** 2 + s[i+1] ** 2)
print(count, maxi)
В результате работы данного алгоритма при вводе данных из файла ответ — 101 453 256 805.
Ответ: 101 453256805.
Приведём решение Вячеслава Симахина на языке Python.
f = open('17.txt')
s = [int(i) for i in f]
count = 0
maxi = 0
tripat = 20001
for i in range(len(s)):
if str(s[i])[-1] =='5':
if len(str(s[i])) == 3:
tripat = min (tripat, s[i])
for i in range(len(s)-1):
if (len(str(s[i])) == 4 and len(str(s[i+1])) != 4) or (len(str(s[i])) != 4 and len(str(s[i+1])) == 4):
if (s[i] ** 2 + s[i+1] ** 2) % tripat == 0:
count += 1
maxi = max (maxi, s[i] ** 2 + s[i+1] ** 2)
print(count, maxi)
Приведём решение Матвея Романова (Москва) на языке Python.
file = open("17.txt", 'r')
nums = [int(x) for x in file.readlines()]
mink = min(list(filter(lambda x: x % 10 == 5 and len(str(x)) == 3, nums)))
count = maxsum = 0
for x, y in zip(nums, nums[1:]):
if [len(str(x)) == 4, len(str(y)) == 4].count(True) == 1:
if (x**2 + y**2) % mink == 0:
count += 1
maxsum = max(maxsum, x**2 + y**2)
print(count, maxsum)

