Задания
Версия для печати и копирования в MS Word

По ка­на­лу связи пе­ре­да­ва­лись по­ло­жи­тель­ные целые числа, не пре­вы­ша­ю­щие 10000  — ре­зуль­та­ты из­ме­ре­ний, по­лу­чен­ных в ходе экс­пе­ри­мен­та (ко­ли­че­ство из­ме­ре­ний N из­вест­но за­ра­нее, га­ран­ти­ру­ет­ся, что N > 2). После окон­ча­ния экс­пе­ри­мен­та пе­ре­даётся кон­троль­ное зна­че­ние  — наи­боль­шее число R, удо­вле­тво­ря­ю­щее сле­ду­ю­щим усло­ви­ям.

1.  R  — сумма двух раз­лич­ных пе­ре­дан­ных эле­мен­тов по­сле­до­ва­тель­но­сти («раз­лич­ные» озна­ча­ет, что нель­зя про­сто удва­и­вать пе­ре­дан­ные числа, суммы раз­лич­ных, но рав­ных по ве­ли­чи­не эле­мен­тов до­пус­ка­ют­ся).

2.  R крат­но 3.

3.  Если в по­сле­до­ва­тель­но­сти нет двух чисел, сумма ко­то­рых крат­на 3, кон­троль­ное зна­че­ние счи­та­ет­ся рав­ным 1.

В ре­зуль­та­те помех при пе­ре­да­че как сами числа, так и кон­троль­ное зна­че­ние могут быть ис­ка­же­ны.

 

Вход­ные дан­ные.

Файл A

Файл B

На вход про­грам­ме в пер­вой стро­ке подаётся ко­ли­че­ство чисел N (N > 2). В каж­дой из по­сле­ду­ю­щих N строк за­пи­са­но одно на­ту­раль­ное число, не пре­вы­ша­ю­щее 10 000.

При­мер ор­га­ни­за­ции ис­ход­ных дан­ных во вход­ном файле:

6

100

8

33

145

19

84

При­мер вы­ход­ных дан­ных для при­ведённого выше при­ме­ра вход­ных дан­ных:

153

В от­ве­те ука­жи­те два числа: сна­ча­ла кон­троль­ное для зна­че­ний из файла А, затем из файла B.

 

Ответ:

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

Ре­ше­ние.

Сумма двух чисел может быть крат­на 3 в двух слу­ча­ях: либо оба сла­га­е­мых крат­ны 3, либо оста­ток от де­ле­ния на 3 од­но­го из них равен 1, а дру­го­го  — 2.

Про­грам­ма, вы­чис­ля­ю­щая кон­троль­ное зна­че­ние, чи­та­ет все вход­ные дан­ные один раз, не за­по­ми­ная их в мас­си­ве. Для про­чи­тан­но­го фраг­мен­та вход­ной по­сле­до­ва­тель­но­сти про­грам­ма хра­нит зна­че­ния самых боль­ших чисел, да­ю­щих при де­ле­нии на 3 остат­ки 1 и 2, и два самых боль­ших числа, крат­ных 3.

М1  — самое боль­шое число, да­ю­щее при де­ле­нии на 3 оста­ток 1;

М2  — самое боль­шое число, да­ю­щее при де­ле­нии на 3 оста­ток 2;

M3A  — самое боль­шое число, крат­ное 3;

M3B  — вто­рое по ве­ли­чи­не число, крат­ное 3.

После того, как все дан­ные про­чи­та­ны, ис­ко­мое кон­троль­ное зна­че­ние вы­чис­ля­ет­ся, как боль­шая из сумм M1 + M2 и M3A + M3B, но пре­жде чем вы­чис­лять каж­дую из этих сумм, нужно убе­дить­ся, что вхо­дя­щие в неё сла­га­е­мые опре­де­ле­ны, то есть в по­сле­до­ва­тель­но­сти были числа с со­от­вет­ству­ю­щи­ми остат­ка­ми.

 

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

var M1,M2,M3A,M3B,R,r1,r2,res,i,N,x: longint;

f: text;

begin

M1 := 0; M2:=0;

M3A := 0; M3B:=0;

assign(f,'28128_A.txt');

reset(f);

readln(f, n);

while not eof(f) do begin

readln(f, x);

case x mod 3 of

0:

if x>M3A then begin

M3B:=M3A; M3A:=x

end

else if x>M3B then M3B:=x;

1:

if x>M1 then M1:=x;

2:

if x>M2 then M2:=x;

end;

end;

if (M1>0) and (M2>0) then r1:=M1+M2

else r1:=1;

if (M3A>0) and (M3B>0) then r2:=M3A+M3B

else r2:=1;

if r1>r2 then res:=r1

else res:=r2;

writeln(res);

end.

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла A ответ  — 19020, из файла B  — 19998.

 

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

Раздел кодификатора ФИПИ: