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

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

За­да­ние 17

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

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

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

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

 

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

 

Ответ:

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

Ре­ше­ние.

При­ведём ре­ше­ние на языке 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 == 19:

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] % 3 == 0 or s[i-1] % 3 == 0 or s[i-2] % 3 == 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)

 

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

 

Ответ: 78  115 709.

 

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

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

MAXI = max([x for x in M if abs(x) % 100 == 19])

count = 0

maxi = -99999

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

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

# A = [len(str(abs(a))) == 4, len(str(abs(b))) == 4, len(str(abs(c))) == 4]

A = [len(str(abs(x))) == 4 for x in [a, b, c]]

if sum(A) == 2:

# if a % 3 == 0 or b % 3 == 0 or c % 3 == 0:

if any(x % 3 == 0 for x in [a, b, c]):

if (a + b + c) > MAXI:

count += 1

maxi = max(maxi, a + b + c)

print(count, maxi)

 

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

f=open('171.txt')

r=[]

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

m19=[x for x in m if x%100==19]

mm19=max(m19)

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

k4=0

if 999 < m[x] < 10000:

k4+=1

if 999 k4+=1

if 999 < m[x+2] < 10000:

k4+=1

if k4==2:

if m[x]%3==0 or m[x+1]%3==0 or m[x+2]%3==0:

if (m[x]+m[x+1]+m[x+2]) > mm19:

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

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