Задания
Версия для печати и копирования в MS Word
Тип 17 № 55634
i

Файл со­дер­жит по­сле­до­ва­тель­ность целых чисел, мо­дуль ко­то­рых на­хо­дит­ся в ин­тер­ва­ле от 100 до 10 000. Назовём парой два иду­щих под­ряд эле­мен­та по­сле­до­ва­тель­но­сти.

За­да­ние 17

Опре­де­ли­те ко­ли­че­ство пар, для ко­то­рых вы­пол­ня­ют­ся сле­ду­ю­щие усло­вия:

—  по­след­няя цифра за­пи­си од­но­го из эле­мен­тов пары сов­па­да­ет с пред­по­след­ней циф­рой за­пи­си дру­го­го эле­мен­та;

—  ровно один эле­мент из пары де­лит­ся без остат­ка на 13;

—  сумма квад­ра­тов эле­мен­тов пары не пре­вы­ша­ет квад­рат наи­мень­ше­го из эле­мен­тов по­сле­до­ва­тель­но­сти, две по­след­ние цифры в за­пи­си ко­то­ро­го оди­на­ко­вы.

 

В от­ве­те за­пи­ши­те два числа: сна­ча­ла ко­ли­че­ство най­ден­ных пар, затем мак­си­маль­ную ве­ли­чи­ну суммы квад­ра­тов эле­мен­тов этих пар.

 

Ответ:

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние на языке 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 == (abs(s[i]) // 10) % 10:

mini = min(mini, s[i])

for i in range(1, len(s)):

if abs(s[i-1]) % 10 == (abs(s[i]) // 10) % 10:

if abs(s[i-1]) % 13 == 0 and abs(s[i]) % 13 != 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]) % 13 == 0 and abs(s[i-1]) % 13 != 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]) % 10 == (abs(s[i-1]) // 10) % 10:

if abs(s[i-1]) % 13 == 0 and abs(s[i]) % 13 != 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]) % 13 == 0 and abs(s[i-1]) % 13 != 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)

 

Ре­зуль­тат ра­бо­ты дан­но­го ал­го­рит­ма  — 115  96944186.

 

При­ме­ча­ние.

Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

При­ведём ре­ше­ние Ильи Ан­дри­а­но­ва на языке Python.

M = [int(x) for x in open('17.txt')]

A = min([x for x in M if str(x)[-1] == str(x)[-2]]) ** 2

count = 0

maxi = 0

for i in range(0, len(M)-1):

x, y = M[i], M[i+1]

if (str(x)[-1] == str(y)[-2]) or (str(x)[-2] == str(y)[-1]):

if (x % 13 == 0 and y % 13 != 0) or (x % 13 != 0 and y % 13 == 0):

if (x**2 + y**2) <= A:

count += 1

maxi = max(maxi, x**2 + y**2)

print(count, maxi)

 

Ре­зуль­тат ра­бо­ты дан­но­го ал­го­рит­ма  — 115  96944186.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

def good(x,y,m):

return (str(x)[-2] == str(y)[-1] or str(x)[-1] == str(y)[-2]) and (x%13==0) != (y%13==0) and x**2+y**2 <= m**2

a = [int(s) for s in open('17.txt')]

m = min([x for x in a if str(x)[-1] == str(x)[-2]])

b = [a[i]**2+a[i+1]**2 for i in range(len(a)-1) if good(a[i],a[i+1],m)]

print(len(b),max(b))