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

По ка­на­лу связи пе­ре­да­ва­лись дан­ные в виде по­сле­до­ва­тель­но­сти по­ло­жи­тель­ных целых чисел. Ко­ли­че­ство чисел за­ра­нее не­из­вест­но, но не менее двух, при­зна­ком конца дан­ных счи­та­ет­ся число 0. Кон­троль­ное зна­че­ние равно та­ко­му мак­си­маль­но воз­мож­но­му про­из­ве­де­нию двух чисел из пе­ре­дан­но­го на­бо­ра, ко­то­рое де­лит­ся на 7, но не де­лит­ся на 49. Если такое про­из­ве­де­ние по­лу­чить нель­зя, кон­троль­ное зна­че­ние счи­та­ет­ся рав­ным 1.

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

 

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

Файл A

Файл B

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

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

6

7

8

9

0

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

63

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

 

Ответ:

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

Ре­ше­ние.

Про­из­ве­де­ние двух чисел будет крат­но 7 и не крат­но 49 в том и толь­ко в том слу­чае, когда один из со­мно­жи­те­лей де­лит­ся на 7 и при этом не де­лит­ся на 49, а вто­рой  — не де­лит­ся на 7. Про­из­ве­де­ние будет мак­си­маль­ным, если оба со­мно­жи­те­ля будут мак­си­маль­но воз­мож­ны­ми в своих груп­пах. Ис­ко­мое про­из­ве­де­ние не су­ще­ству­ет (кон­троль­ное зна­че­ние счи­та­ет­ся рав­ным 1), если в одной из ука­зан­ных групп не ока­жет­ся ни од­но­го числа.

Про­грам­ма чи­та­ет вход­ные дан­ные, не за­по­ми­ная числа в мас­си­ве, и на­хо­дит два мак­си­маль­ных зна­че­ния: мак­си­мум из чисел, крат­ных 7 и при этом не крат­ных 49, и мак­си­мум из чисел, не крат­ных 7. Затем про­грам­ма вы­чис­ля­ет кон­троль­ное зна­че­ние, рав­ное про­из­ве­де­нию этих двух мак­си­му­мов, и срав­ни­ва­ет его с введённым кон­троль­ным зна­че­ни­ем.

 

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

var

k: integer; {вве­ден­ное число}

n: integer; {ко­ли­че­ство чисел} pin: integer;{вве­ден­ное кон­троль­ное зна­че­ние}

m: integer; {мак­си­мум среди чисел, не крат­ных 7}

m7: integer; {мак­си­мум среди чисел, крат­ных 7 и не крат­ных 49}

p: integer; {вы­чис­лен­ное кон­троль­ное зна­че­ние}

f: text;

begin

m:=0; m7:=0; n:=0;

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

reset(f);

while true do begin

readln(f, k);

if k=0 then break;

n:=n+1;

if (k mod 7 <> 0) and (k>m) then m:=k;

if (k mod 7 = 0) and (k mod 49 <> 0) and (k>m7)

then m7:= k;

end;

p:=m*m7;

if p=0 then p:= 1;

writeln(P);

end.

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

 

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

f = open('27986_B.txt')

m7, mmax = 0, 0

while True:

a = int(f.readline())

if a == 0:

break

if a % 7 == 0 and a % 49 != 0 and a > m7:

m7 = a

if a % 7 != 0 and a > mmax:

mmax = a

Q = m7 * mmax

if Q:

print(Q)

else:

print('1')

 

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

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