Файл содержит последовательность целых чисел, по модулю не превышающих 10 000. Назовём парой два идущих подряд элемента последовательности.
Определите количество пар, для которых выполняются следующие условия:
— запись элементов пары заканчивается одной и той же цифрой;
— ровно один элемент из пары делится без остатка
— сумма квадратов элементов пары не превышает квадрат наименьшего из элементов последовательности, запись которых заканчивается
В ответе запишите два числа: сначала количество найденных пар, затем максимальную величину суммы квадратов элементов этих пар.
Ответ:
Приведём решение на языке Python.
f = open('17.txt')
s = f.readlines()
for i in range(len(s)):
s[i] = int(s[i])
count = 0
maxi = 0
mini = 0
for i in range(len(s)):
if abs(s[i]) % 10 == 3:
mini = min(mini, s[i])
for i in range(1, len(s)):
if abs(s[i-1]) % 10 == abs(s[i]) % 10:
if abs(s[i-1]) % 3 == 0 and abs(s[i]) % 3 != 0 and s[i-1]**2 + s[i]**2 <= mini**2:
count+=1
maxi=max(maxi, s[i-1]**2 + s[i]**2)
elif abs(s[i]) % 3 == 0 and abs(s[i-1]) % 3 != 0 and s[i-1]**2 + s[i]**2 <= mini**2:
count+=1
maxi=max(maxi, s[i-1]**2 + s[i]**2)
print(count, maxi)
Результат работы данного алгоритма —
Ответ: 172 99446482.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Юрия Лысакова на языке Python.
f = open('17.txt')
b = [int(i) for i in f]
c = [x for x in b if abs(x) % 10 == 3]
min1 = min(c)**2
b = [abs(x) for x in b]
max1,n = 0,0
for j in range(0,len(b)-1):
if (b[j] % 10 == b[j + 1] % 10) and (((b[j] % 3 == 0) and (b[j + 1] % 3 != 0)) or ((b[j+1] % 3 == 0) and (b[j] % 3 != 0))) and (b[j + 1]**2 + b[j]**2 <= min1):
n += 1
max1 = max(max1,b[j]**2+b[j+1]**2)
print(n,'',max1)
Приведём решение Юрия Красильникова на языке Python.
a = [int(s) for s in open('17.txt')]
m = min([x for x in a if abs(x)%10==3])
b = [a[i]**2+a[i+1]**2 for i in range(len(a)-1) if abs(a[i])%10 == abs(a[i+1])%10 and (a[i]%3==0) != (a[i+1]%3==0) and a[i]**2+a[i+1]**2 <= m**2]
print(len(b),max(b))

