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

По ка­на­лу связи пе­ре­да­ва­лась по­сле­до­ва­тель­ность по­ло­жи­тель­ных целых чисел, все числа не пре­вы­ша­ют 1000. Ко­ли­че­ство чисел из­вест­но. Затем пе­ре­даётся кон­троль­ное зна­че­ние по­сле­до­ва­тель­но­сти  — наи­боль­шее число R, удо­вле­тво­ря­ю­щее сле­ду­ю­щим усло­ви­ям:

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

2)  R де­лит­ся на 14.

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

 

Про­грам­ма долж­на на­пе­ча­тать одно число  — вы­чис­лен­ное кон­троль­ное зна­че­ние, со­от­вет­ству­ю­щую усло­ви­ям за­да­чи.

 

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

Файл A

Файл B

Даны два вход­ных файла (файл A и файл B), каж­дый из ко­то­рых со­дер­жит в пер­вой стро­ке ко­ли­че­ство чисел N (1 ≤ N ≤ 100000). В каж­дой из по­сле­ду­ю­щих N строк за­пи­са­но одно на­ту­раль­ное число, не пре­вы­ша­ю­щее 1000.

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

6

77

14

7

9

499

100

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

7700

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

 

Ответ:

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

Ре­ше­ние.

Про­из­ве­де­ние двух чисел де­лит­ся на 14, если:

— один из со­мно­жи­те­лей де­лит­ся на 14 (вто­рой может быть любым) либо

— ни один из со­мно­жи­те­лей не де­лит­ся на 14. причём один из со­мно­жи­те­лей де­лит­ся на 2, а дру­гой  — на 7.

По­это­му про­грам­ма, вы­чис­ля­ю­щая ко­до­вое число, может ра­бо­тать так.

Про­грам­ма чи­та­ет все вход­ные дан­ные один раз, не за­по­ми­ная все дан­ные в мас­си­ве. Про­грам­ма для про­чи­тан­но­го фраг­мен­та вход­ной по­сле­до­ва­тель­но­сти хра­нит зна­че­ния че­ты­рех ве­ли­чин:

М2  — самое боль­шое чётное число, не крат­ное 7;

М7  — самое боль­шое число, крат­ное 7. но не крат­ное 2;

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

МАХ  — самое боль­шое число среди всех эле­мен­тов по­сле­до­ва­тель­но­сти, от­лич­ное от M14 (если число М14 встре­ти­лось более од­но­го раза и оно же яв­ля­ет­ся мак­си­маль­ным, то МАХ = M14).

После того как все дан­ные про­чи­та­ны, ис­ко­мое ко­до­вое слово вы­чис­ля­ет­ся как мак­си­мум из про­из­ве­де­ний M14*МАХ и М2*М7.

Ниже при­ведён при­мер про­грам­мы на языке Пас­каль, ко­то­рая ре­а­ли­зу­ет опи­сан­ный ал­го­ритм.

Кроме того, при­ведён при­мер про­грам­мы на языке Бей­сик, ко­то­рая пра­виль­но ре­ша­ет за­да­чу, но ис­поль­зу­ет ал­го­ритм, не­мно­го от­ли­ча­ю­щий­ся от опи­сан­но­го выше. Воз­мож­ны и дру­гие пра­виль­ные ал­го­рит­мы. До­пус­ка­ют­ся ре­ше­ния, за­пи­сан­ные на дру­гих язы­ках про­грам­ми­ро­ва­ния.

 

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

var M2, M7, M14, MAX, dat, res, N: longint; f: text;

begin

M2 := 0; M7 := 0; M14 := 0; MAX := 0;

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

reset(f);

readln(f, N);

while not eof(f) do begin

readln(f, dat);

if ((dat mod 2) = 0) and ((dat mod 7) >0) and (dat > M2) then M2 := dat;

if ((dat mod 7) = 0) and ((dat mod 2) > 0) and (dat > M7) then M7 := dat;

if (dat mod 14 = 0) and (dat > M14) then begin

if M14 > MAX then MAX := M14;

M14 := dat;

end

else

if dat > MAX then MAX := dat;

end;

if (M2*M7 < M14 *MAX) then

res := M14*MAX

else

res := M2*M7;

writeln(res);

end.

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

 

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

 

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