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

Файл со­дер­жит по­сле­до­ва­тель­ность не­от­ри­ца­тель­ных целых чисел, не пре­вы­ша­ю­щих 10 000. Назовём парой два иду­щих под­ряд эле­мен­та по­сле­до­ва­тель­но­сти. Опре­де­ли­те ко­ли­че­ство пар, в ко­то­рых один из двух эле­мен­тов де­лит­ся на 3, а дру­гой мень­ше сред­не­го ариф­ме­ти­че­ско­го всех чётных эле­мен­тов по­сле­до­ва­тель­но­сти. В от­ве­те за­пи­ши­те два числа: сна­ча­ла ко­ли­че­ство най­ден­ных пар, а затем  — мак­си­маль­ную сумму эле­мен­тов таких пар.

За­да­ние 17

На­при­мер, в по­сле­до­ва­тель­но­сти (1 3 8 9 4) есть две под­хо­дя­щие пары: (1 3) и (9 4), в от­ве­те для этой по­сле­до­ва­тель­но­сти надо за­пи­сать числа 2 и 13.

 

Ответ:

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

Ре­ше­ние.

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

var

x, y, count, maxsum: integer;

average: real;

f: text;

begin

assign(f,'D:\17.txt');

reset(f);

count := 0;

average := 0;

while not eof(f) do begin

readln(f, x);

if x mod 2 = 0 then begin

average := average + x;

count := count + 1;

end;

end;

close(f);

average := average / count;

count := 0;

maxsum := 0;

reset(f);

readln(f, x);

while not eof(f) do begin

readln(f, y);

if ((x mod 3 = 0) and (y < average)) or ((x < average) and (y mod 3 = 0)) then begin

count := count + 1;

if (x + y > maxsum) then maxsum := x + y;

end;

x := y;

end;

writeln(count, ' ', maxsum);

end.

 

Ре­зуль­тат ра­бо­ты про­грам­мы  — 1711 14666.

 

Ответ: 1711 14666.

 

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

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

p = f.readlines()

summ = 0

kol = 0

for i in range(0, len(p)):

if int(p[i]) % 2 == 0:

summ += int(p[i])

kol += 1

summ /= kol

k = 0

maxx = -20000

for i in range(len(p) - 1):

a = int(p[i])

b = int(p[i + 1])

if (a % 3 == 0 and b < summ) or (b % 3 == 0 and a < summ):

k += 1

if a + b > maxx:

maxx = a + b

print(k, maxx)

 

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

 

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

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

 

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

k = 0

ms = 0

m0 = [x for x in m if x%2==0]

sr = sum(m0)/len(m0)

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

if m[x]%3==0 and m[x+1] < sr:

k += 1

ms = max(ms,m[x]+m[x+1])

elif m[x+1]%3==0 and m[x] < sr:

k += 1

ms = max(ms,m[x]+m[x+1])

print(k,ms)

 

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

def good(a,b,sa):

return (a % 3 == 0 and b < sa) or (a < sa and b % 3 == 0)

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

even = [x for x in a if x%2==0]

sa = sum(even)/len(even)

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

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