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

На вход про­грам­мы по­да­ют­ся све­де­ния о на­бран­ных на ЕГЭ бал­лах уче­ни­ка­ми дан­ной школы по трём пред­ме­там. В пер­вой стро­ке со­об­ща­ет­ся ко­ли­че­ство уча­щих­ся N, каж­дая из сле­ду­ю­щих N строк имеет фор­мат: < Фа­ми­лия > < Ини­ци­а­лы > <Бал­лы­По­Рус­ско­му­Язы­ку> <Бал­лы­По­Ма­те­ма­ти­ке> <Бал­лы­По­Ин­фор­ма­ти­ке>, где <Фа­ми­лия> — стро­ка, со­сто­я­щая не более чем из 20 сим­во­лов, < Ини­ци­а­лы > — стро­ка, со­сто­я­щая из 4-х сим­во­лов (буква, точка, буква, точка), <Бал­лы­По­Рус­ско­му­Язы­ку>, <Бал­лы­По­Ма­те­ма­ти­ке>, <Бал­лы­По­Ин­фор­ма­ти­ке> — целые числа в диа­па­зо­не от 0 до 100. Все эле­мен­ты одной стро­ки от­де­ле­ны друг от друга про­бе­лом.

При­мер вход­ной стро­ки: Пет­ров С. Н. 78 82 70

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

Сле­ду­ет учи­ты­вать, что N ^ 100.

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

Ре­ше­ние.

var fio:array[1..100] of string;

var fioMin:array[1..100] of string;

var sumMin:array[1..100] of integer;

bRus:array[1..100] of integer;

bMath:array[1..100] of integer;

bInf:array[1..100] of integer;

min,N,i,k,b,sum,iMin: integer;

с: char;

iMin: = 1;

begin readln(N);

min:=300;

for i:=1 to N do

begin

fio[i]:='';

for k:=1 to 2 do

repeat read(c);

fio[i]:=fio[i]+c;

until c=' ';

read(bRus[i]);

read(bMath[i]);

read(bInf[i]);

sum = (bRus[i] + bMath[i] + bInf[i]);

 

if sum = min then

begin

fioMin[iMin] = fio[iMin];

sumMin[iMin] = sum;

iMin = iMin + 1;

end;

 

if sum < min then

begin

min: = sum;

for i:=1 to 100 do

begin

fioMin[i]: = '';

end;

fioMin[1]: = fio[i];

sumMin[1] = sum;

iMin := 1;

end;

end;

for (i:=iMin downto 1) writeln(fioMin[i], sumMin[i]);

end.

 

При­ведём ре­ше­ние Ильи Му­ра­то­ва, Python.

 

n = int(input())

pupils = []

min_sum = 301

for i in range(n):

    lname, name_io, r_mark, m_mark, i_mark = input().split(' ')

    mark_sum = int(r_mark) + int(m_mark) + int(i_mark)

    if mark_sum < min_sum and mark_sum != 0:

        pupils = []

        pupils.append(lname + ' ' + name_io)

        min_sum = mark_sum

    elif mark_sum == min_sum and mark_sum != 0:

        pupils.append(lname + ' ' + name_io)

for pupil in pupils:

    print pupil, min_sum / 3. # точка важна, иначе будет це­ло­чис­лен­ное де­ле­ние

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

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

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

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

Пред­ла­гаю свое ре­ше­ние на C++

int main()

{

int MinAvg = 301, N, m1,m2,m3;

string lname, fname;

vector<pair<int, string>> vec;

vec.push_back(make_pair(301, "vasyan"));

cin >> N;

for (; N != 0;--N)

{

cin >> lname >> fname >> m1 >> m2 >> m3;

MinAvg = (m1 + m2 + m3) / 3;

if (vec[0].first == MinAvg)

vec.push_back(make_pair(MinAvg, lname + ' ' + fname));

if(vec[0].first>MinAvg)

{

vec.clear();

vec.push_back(make_pair(MinAvg, lname + ' ' + fname));

}

}

cout << endl;

for(auto x:vec)

{

cout << x.second << ' ' << x.first << endl;

}

}

Ильсур Шайхутдинов 20.05.2016 23:05

{ пред­ла­гаю свой более по­нят­ный, оп­ти­маль­ный по па­мя­ти и вре­ме­ни код на языке пас­каль }

program z27; uses crt;

type uch=record bal:real; nam:string; end;

var i,n,m1,m2,m3:integer; ch:char; s:string; min:real;

a:array[1..100] of uch;

begin

clrscr;

readln(n); s:='';

for i:=1 to n do

begin

repeat

read(ch); s:=s+ch;

until ch=' ';

s:=s+' ';

repeat

read(ch); s:=s+ch;

until ch=' ';

read(m1,m2,m3);

a[i].nam:=s; s:='';

a[i].bal:=(m1+m2+m3)/3;

end;

min:=101;

for i:=1 to n do if (a[i].bal < min) and (a[i].bal > 0) then min:=a[i].bal;

for i:=1 to n do if (a[i].bal=min) then writeln(a[i].nam,' ',a[i].bal); readkey;

end.