Задания
Версия для печати и копирования в MS Word
Тип 17 № 76714
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]]

alen5 = [x for x in troika if len(str(x)) == 5]

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(alen5) <= 1 and len(a_sravni_amin) >= 1 and len(a_sravni_amax) == 0:

s3.append(sum(troika))

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

 

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

 

Ответ: 55  113955.

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

s=open('17.txt').readlines()

m=[int(x) for x in s]

r=[]

maxi=(max(m))%10

mini=(min(m))%10

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

k5=0

if 9999 < m[i] < 100000:

k5+=1

if 9999 < m[i+1] < 100000:

k5+=1

if 9999 < m[i+2] < 100000:

k5+=1

if k5 <= 1:

if m[i]%10==mini or m[i+1]%10==mini or m[i+2]%10==mini:

if not(m[i]%10==maxi or m[i+1]%10==maxi or m[i+2]%10==maxi):

r.append(m[i+1]+m[i+2]+m[i])

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

 

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

f=open('17.txt')

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

mini=min(a)%10

maxi=max(a)%10

k=0

ans=0

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

if (len(str(a[i]))!=5 and len(str(a[i+1]))!=5 and len(str(a[i+2]))!=5) or (len(str(a[i]))==5 and len(str(a[i+1]))!=5 and len(str(a[i+2]))!=5) or (len(str(a[i]))!=5 and len(str(a[i+1]))==5 and len(str(a[i+2]))!=5) or (len(str(a[i]))!=5 and len(str(a[i+1]))!=5 and len(str(a[i+2]))==5):

if a[i]%10==mini or a[i+1]%10==mini or a[i+2]%10==mini:

if a[i] % 10 != maxi and a[i + 1] % 10 != maxi and a[i + 2] % 10 != maxi:

k+=1

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

print(k,ans)

 

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

def good(p,m,M):

t = [10000 <= abs(x) < 100000 for x in p]

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

return sum(t) <= 1 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))