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

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

За­да­ние 17

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

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

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

—  сумма эле­мен­тов трой­ки боль­ше мак­си­маль­но­го эле­мен­та по­сле­до­ва­тель­но­сти, за­пись ко­то­ро­го за­кан­чи­ва­ет­ся на 17. (Га­ран­ти­ру­ет­ся, что в по­сле­до­ва­тель­но­сти есть хотя бы один эле­мент, за­пись ко­то­ро­го за­кан­чи­ва­ет­ся на 17.)

 

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

 

Ответ:

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

Ре­ше­ние.

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

f = open('17.txt')

s = f.readlines()

for i in range(len(s)):

s[i] = int(s[i])

count = 0

maxi = 0

maxsum = 0

for i in range(len(s)):

if abs(s[i]) % 100 == 17:

maxi = max(maxi, s[i])

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

k1 = 0

k2 = 0

k3 = 0

c1 = abs(s[i-2])

c2 = abs(s[i-1])

c3 = abs(s[i])

while c1 > 0:

k1 += 1

c1 //= 10

while c2 > 0:

k2 += 1

c2 //= 10

while c3 > 0:

k3 += 1

c3 //= 10

if (k1 == 4 and k2 == 4 and k3 != 4) or (k1 == 4 and k2 != 4 and k3 == 4) or (k1 != 4 and k2 == 4 and k3 == 4):

if s[i] % 5 == 0 or s[i-1] % 5 == 0 or s[i-2] % 5 == 0:

if s[i-2] + s[i-1] + s[i] > maxi:

count += 1

maxsum = max(maxsum, s[i-2] + s[i-1] + s[i])

print(count, maxsum)

 

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

 

Ответ: 21  114132.

 

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

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

A = [x for x in M if abs(x) % 100 == 17]

count = 0

maxi = -9999999999

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

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

if len([i for i in [x, y, z] if len(str(abs(i))) == 4]) == 2:

if any(i % 5 == 0 for i in [x, y, z]):

if (x + y + z) > max(A):

count += 1

maxi = max(maxi, x + y + z)

print(count, maxi)

 

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

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

me17 = max([x for x in a if x % 100 == 17])

b = [a[i:i+3] for i in range(len(a)-2)]

c = [sum(x) for x in b if sum([1000 <= n < 10000 for n in x]) == 2 and sum([n % 5 == 0 for n in x]) > 0 and sum(x) > me17]

print(len(c),max(c))

 

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

f = open('17.txt')

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

maxi17 = count = maxisum = 0

for i in range(len(m)):

if m[i]%17 == 0: maxi17 = max(maxi17,m[i])

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

k4 = 0

if len(str(m[i]))==4: k4 += 1

if len(str(m[i+1]))==4: k4 += 1

if len(str(m[i+2]))==4: k4 += 1

if k4==2 and (m[i]%5==0 or m[i+1]%5==0 or m[i+2]%5==0):

if m[i]+m[i+1]+m[i+2] > maxi17:

maxisum = max(m[i]+m[i+1]+m[i+2],maxisum)

count+=1

print(count,maxisum)