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

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

За­да­ние 17

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

 

Ответ:

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

Ре­ше­ние.

Решим за­да­чу пе­ре­бо­ром. При­ведём ре­ше­ние дан­ной за­да­чи на языке PascalABC:

var

x, y, count, maxsum: integer;

average: real;

f: text;

begin

assign(f,'C:\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) or (y mod 3 = 0)) and ((x < average) or (y < average)) then begin

count := count + 1;

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

end;

x := y;

end;

writeln(count, ' ', maxsum);

end.

 

При­ведём ре­ше­ние Ни­ко­лая Чур­ки­на (Ти­ма­шевск) на языке Python.

f = open('17.txt')

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

count = 0

mx = 0

s = 0

n = 0

for i in range(len(a)):

if (a[i] % 2 == 0):

s += a[i]

n += 1

x = s / n

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

if ((a[i] % 3 == 0) or (a[i + 1] % 3 == 0)) and ((a[i] < x) or (a[i + 1] < x)):

count += 1

mx = max(mx, a[i] + a[i + 1])

print(count, mx)

 

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

 

Ответ: 2288 14875.

 

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

f = open('17.txt')

b = [int(i) for i in f]

c = [int(x) for x in b if int(x)%2 == 0]

t1 = sum(c) / len(c)

n, max1 = 0,0

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

if ((b[j] % 3 == 0) or (b[j + 1] % 3 == 0)) and ((b[j] < t1) or (b[j + 1] < t1)):

n += 1

max1 = max(max1,b[j]+b[j+1])

print(n,'',max1)