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

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

За­да­ние 17

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

 

Ответ:

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

Ре­ше­ние.

Решим в два про­хо­да. В пер­вом про­хо­де найдём сред­нее ариф­ме­ти­че­ское зна­че­ние всех нечётных эле­мен­тов по­сле­до­ва­тель­но­сти, а во вто­ром про­хо­де найдём ко­ли­че­ство пар и мак­си­маль­ную сумму эле­мен­тов таких пар. При­ведём ре­ше­ние дан­ной за­да­чи на языке 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 5 = 0) and (y < average)) or ((x < average) and (y mod 5 = 0)) then begin

count := count + 1;

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

end;

x := y;

end;

writeln(count, ' ', maxsum);

end.

 

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

 

Ответ: 1061 14847.

 

При­ведём ре­ше­ние на языке 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 % 5 == 0 and b < summ) or (b % 5 == 0 and a < summ):

k += 1

if a + b > maxx:

maxx = a + b

print(k, maxx)

 

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

 

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

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