Задания
Версия для печати и копирования в MS Word
Тип Д19 C4 № 3140
i

Завод по огран­ке дра­го­цен­ных кам­ней при­обрёл сейф по­вы­шен­ной надёжно­сти. Для опре­де­ле­ния дра­го­цен­ных кам­ней, ко­то­рые не­об­хо­ди­мо по­ло­жить в сейф, сна­ча­ла от­би­ра­ют­ся 5% самых до­ро­гих кам­ней.

Если у са­мо­го дешёвого камня из во­шед­ших в груп­пу 5% самых до­ро­гих ока­зы­ва­ет­ся це­но­вая ка­те­го­рия такая же, как и у не­сколь­ких дру­гих, то эти камни тоже вклю­ча­ют­ся в груп­пу кам­ней для раз­ме­ще­ния в сейфе по­вы­шен­ной надёжно­сти в том слу­чае, если их це­но­вая ка­те­го­рия не менее 15.

На­пи­ши­те эф­фек­тив­ную по вре­ме­ни ра­бо­ты и по ис­поль­зу­е­мой па­мя­ти про­грам­му (ука­жи­те ис­поль­зу­е­мую вер­сию языка про­грам­ми­ро­ва­ния, на­при­мер, Borland Pascal 7.0), ко­то­рая по ре­зуль­та­там вход­ных дан­ных будет опре­де­лять, какую ми­ни­маль­ную цену дол­жен иметь дра­го­цен­ный ка­мень, чтобы его по­ме­сти­ли в сейф по­вы­шен­ной надёжно­сти.

На вход про­грам­ме сна­ча­ла подаётся общее ко­ли­че­ство кам­ней на скла­де N. В каж­дой из сле­ду­ю­щих N строк на­хо­дит­ся ин­фор­ма­ция по каж­до­му камню от­дель­но в сле­ду­ю­щем фор­ма­те:

< На­зва­ние дра­го­цен­но­го камня > < Код > < Це­но­вая ка­те­го­рия >, где < На­зва­ние дра­го­цен­но­го камня > — стро­ка, со­сто­я­щая не более чем из 20 сим­во­лов, <Код> — стро­ка, со­сто­я­щая не более чем из 15 сим­во­лов, < Це­но­вая ка­те­го­рия > — целое число от 1 до 20.

< На­зва­ние дра­го­цен­но­го камня >, < Код > и < Це­но­вая ка­те­го­рия > раз­де­ле­ны одним про­бе­лом. При­мер вход­ной стро­ки: Рубин Р 123413.

Про­грам­ма долж­на вы­во­дить ми­ни­маль­ную Це­но­вую ка­те­го­рию дра­го­цен­но­го камня, ко­то­рый не­об­хо­ди­мо по­ло­жить в сейф по­вы­шен­ной надёжно­сти.

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

Ре­ше­ние.

Про­грам­ма чи­та­ет все вход­ные дан­ные один раз, сразу под­счи­ты­вая в мас­си­ве с ин­дек­са­ми от 1 до 20 ко­ли­че­ство кам­ней, при­над­ле­жа­щих опре­делённой це­но­вой ка­те­го­рии. Путём про­смот­ра этого мас­си­ва с конца (от 20-й це­но­вой ка­те­го­рии) опре­де­ля­ет­ся число кам­ней, за­ве­до­мо по­па­да­ю­щих в число 5% самых до­ро­гих (до­бав­ле­ние всех кам­ней, сле­ду­ю­щей це­но­вой ка­те­го­рии при­во­дит к вы­хо­ду за 5%). По­след­няя це­но­вая ка­те­го­рия, в ко­то­рую по­па­ло не менее од­но­го дра­го­цен­но­го камня, за­по­ми­на­ет­ся. Если хотя чбы один из кам­ней сле­ду­ю­щей це­но­вой ка­те­го­рии также по­па­да­ет в 5%, то про­ве­ря­ет­ся имеют ли он и дру­гие камни, на­брав­шие столь­ко же бал­лов, це­но­вую ка­те­го­рию не менее 15-й. В этом слу­чае они все до­бав­ля­ют­ся к числу дра­го­цен­ных кам­ней, ко­то­рые не­об­хо­ди­мо по­ме­стить в сейф по­вы­шен­ной надёжно­сти и це­но­вая ка­те­го­рия ко­то­рых яв­ля­ет­ся ис­ко­мой.

Пас­каль

var kcenkat : array[1..20] of integer;

с : char;

i,N,b,S,minckat : integer;

begin

for i:=0 to 20 do kcenkat[i]:=0;

readln(N);

for i:=l to N do

begin

repeat

read(c);

until c=' '; {счи­та­но на­зва­ние дра­го­цен­но­го камня}

repeat

read(c);

until c=' '; {счи­тан код}

readln(b);

kcenkat[b]:-kcenkat[b]+1;

end;

S:=0; b:=20;

while S+kcenkat[b] < N*0.05 do

begin

if kcenkat[b]>0 then

begin

S:=S+kcenkat[b];

minckat:=b;

end;

b:=b-l;

end;{опре­де­ле­ны те камни, ко­то­рые на­вер­ня­ка по­па­да­ют

в сейф и про­пу­ще­ны це­но­вые ка­те­го­рии, в ко­то­рые

не попал ни один ка­мень}

if S+1<=N*0.05 then

{если ещё хотя бы один дра­го­цен­ный ка­мень попадёт

в 5%,то про­ве­ря­ет­ся: це­но­вая ка­те­го­рия этого и

таких же кам­ней  — не менее 15-й}

if b>=15 then minckat:=b

writeln(minckat);

end.

 

Бей­сик

DIM kcenkatU ТО 20) AS INTEGER

DIM ss AS STRING

INPUT N

FOR TO N

LINE INPUT ss

i=l

DO

c$sMID$(ss,i,l)

i-i+i;

LOOP WHILE c$<>" "

'Счи­ты­ва­ем на­зва­ние дра­го­цен­но­го камня

DO

c$-MID$(ss,i,l)

i-i+1

LOOP WHILE c$<>" "

'Счи­ты­ва­ем код

b=VAL(MID$(ss,i))

kcenkat(b)-kcenkat(b)+1

NEXT j

b-20

WHILE s+kcenkat(b)<=N*0.05

IF kcenkat(b)>0 THEN

s=s+kcenkat(b)

minckat-b

END IF

b=b-l

WEND

IF s+l<N*0.05 THEN

IF b>-15 THEN

minckat-b

END IF

END IF

PRINT minckat

END

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма ра­бо­та­ет для любых вход­ных дан­ных про­из­воль­но­го раз­ме­ра и на­хо­дит ответ, не со­хра­няя вход­ные дан­ные в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N (ко­ли­че­ству за­про­сов). Про­грам­ма про­смат­ри­ва­ет вход­ные дан­ные один раз. До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы одной син­так­си­че­ской ошиб­ки: про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции, не­вер­но на­пи­са­но или про­пу­ще­но за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния, не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная, при­ме­ня­ет­ся опе­ра­ция, не­до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных (если одна и та же ошиб­ка встре­ча­ет­ся не­сколь­ко раз, то это счи­та­ет­ся за одну ошиб­ку).4
Про­грам­ма ра­бо­та­ет верно, но вход­ные дан­ные за­по­ми­на­ют­ся в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N. Этот мас­сив, воз­мож­но, потом сор­ти­ру­ет­ся. До­пус­ка­ет­ся на­ли­чие от одной до трех син­так­си­че­ских оши­бок. Воз­мож­но, в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ном вводе дан­ных есть одна ошиб­ка (на­при­мер, ис­поль­зо­ва­ние read вме­сто readln в Пас­ка­ле или не­вер­ное счи­ты­ва­ние стро­ки в C++). Три балла также вы­став­ля­ет­ся, если в эф­фек­тив­ной про­грам­ме, удо­вле­тво­ря­ю­щей кри­те­ри­ям вы­став­ле­ния 4 бал­лов, есть одна ошиб­ка, в ре­зуль­та­те ко­то­рой про­грам­ма ра­бо­та­ет не­вер­но на не­ко­то­рых на­бо­рах не­ти­пич­ных вход­ных дан­ных.3
Про­грам­ма ра­бо­та­ет в целом верно, эф­фек­тив­но или нет, но в ре­а­ли­за­ции ал­го­рит­ма со­дер­жит­ся до двух оши­бок (не­вер­ная ини­ци­а­ли­за­ция счётчи­ков, до­пу­ще­на ошиб­ка в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ной сор­ти­ров­ке или ал­го­рит­ме по­ис­ка ми­ни­маль­ных эле­мен­тов, ис­поль­зу­ет­ся знак “<” вме­сто “<=”, “or” вме­сто “and” и тому по­доб­ное).

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

2
Про­грам­ма, воз­мож­но, не­вер­но ра­бо­та­ет при не­ко­то­рых вход­ных дан­ных, но по при­ведённому тек­сту ре­ше­ния ясно, что эк­за­ме­ну­е­мый по­ни­ма­ет, из каких эта­пов долж­но со­сто­ять ре­ше­ние за­да­чи. При ис­поль­зо­ва­нии сор­ти­ров­ки она может быть ре­а­ли­зо­ва­на прин­ци­пи­аль­но не­вер­но (на­при­мер, вме­сто двух цик­лов ис­поль­зу­ет­ся один), или до­пу­ще­на прин­ци­пи­аль­ная ошиб­ка в по­ис­ке нуж­ных эле­мен­тов. Всего до­пус­ка­ет­ся до 4 раз­лич­ных оши­бок в ре­а­ли­за­ции ал­го­рит­ма, в том числе опи­сан­ных в кри­те­ри­ях при­сво­е­ния двух бал­лов. До­пус­ка­ет­ся на­ли­чие от одной до семи син­так­си­че­ских оши­бок, опи­сан­ных выше.1
За­да­ние не вы­пол­не­но или вы­пол­не­но не­вер­но.0
Мак­си­маль­ный балл4