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

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

За­да­ние 17

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

 

Ответ:

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

Ре­ше­ние.

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

var

x, y, count, maxsum: integer;

f: text;

begin

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

reset(f);

count := 0;

maxsum := 0;

readln(f, x);

while not eof(f) do begin

readln(f, y);

if ((x mod 3 = 0) or (y mod 3 = 0)) and ((x + 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.

 

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

 

Ответ: 635 19730.

 

При­ведём ре­ше­ние Павла Шост­ка на языке PascalABC:

var a:=readalltext('17.txt').ToIntegers.Pairwise.

Where(\(x,y)->(x.divs(3) or y.divs(3)) and (x+y).divs(5));

a.Count.Println;

a.Select(\(x,y)->x+y).Max.Print;

end.

 

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

f=open('17_38951.txt')

Sum=0

Mx=0

x=int(f.readline())

for y in f:

y=int(y)

if (((x+y)%5==0) and ((x%3==0) or (y%3==0))):

Sum += 1

Mx = max(Mx,x+y)

x=y

print(Sum,Mx)

Раздел кодификатора ФИПИ: 1.7.2 Ос­нов­ные кон­струк­ции языка про­грам­ми­ро­ва­ния. Си­сте­ма про­грам­ми­ро­ва­ния