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

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

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

—  в трой­ке есть хотя бы два четырёхзнач­ных числа;

—  в трой­ке есть число, по­след­няя цифра ко­то­ро­го сов­па­да­ет с по­след­ней циф­рой мак­си­маль­но­го эле­мен­та всей по­сле­до­ва­тель­но­сти;

—  в трой­ке нет чисел, по­след­няя цифра ко­то­рых сов­па­да­ет с по­след­ней циф­рой ми­ни­маль­но­го эле­мен­та всей по­сле­до­ва­тель­но­сти.

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

За­да­ние 17

Ответ:

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

Ре­ше­ние.

При­ведём ре­ше­ние на языке Python.

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

amax = max(a) % 10

amin = min(a) % 10

s3 = []

for i in range (len(a) - 2):

troika = [a[i] , a[i+1] , a[i+2]]

alen4 = [x for x in troika if len(str(x)) == 4]

a_sravni_amin = [x for x in troika if x % 10 == amin]

a_sravni_amax = [x for x in troika if x % 10 == amax]

if len(alen4) >= 2 and len(a_sravni_amin) == 0 and len(a_sravni_amax) > 0:

s3.append(sum(troika))

print(len(s3),max(s3))

 

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла ответ  — 46  113153.

 

Ответ: 46  113153.

 

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

f = open('17.txt')

a = [int(x) for x in f]

ans = 0

k = 0

for i in range (0,len(a)-2):

b = [a[i],a[i+1],a[i+2]]

k1 = 0

for j in range (0,len(b)):

if len(str(b[j])) == 4:

k1+=1

if k1 >= 2:

if ((a[i]%10==max(a)%10) or (a[i+1]%10==max(a)%10) or (a[i+2]%10==max(a)%10)):

if ((a[i]%10!=min(a)%10) and (a[i+1]%10!=min(a)%10) and (a[i+2]%10!=min(a)%10)):

k+=1

ans=max(ans,(a[i]+a[i+1]+a[i+2]))

print(k,ans)

 

При­ведём ре­ше­ние Ирины Бу­ла­хо­вой на языке Python.

with open('17.txt') as f:

a = [int(x) for x in f]

ans = []

a_max = max(a) % 10

a_min = min(a) % 10

for x, y, z in zip(a, a[1:], a[2:]):

if (((1000 <= x < 10000) + (1000 <= y < 10000) + (1000 <= z < 10000) >= 2)

and ((x % 10 == a_max) or (y % 10 == a_max) or (z % 10 == a_max))

and ((x % 10 != a_min) and (y % 10 != a_min) and (z % 10 != a_min))):

ans.append(x + y + z)

print(len(ans), max(ans))

 

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

def good(p,m,M):

t = [1000 <= x < 10000 for x in p]

pc = [str(x)[-1] for x in p]

return sum(t) >= 2 and M in pc and not m in pc

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

m = str(min(a))[-1]

M = str(max(a))[-1]

r = [sum(a[i-2:i+1]) for i in range(2,len(a)) if good(a[i-2:i+1],m,M)]

print(len(r),max(r))