Пример задачи (C4 прошлых лет):
В
некотором вузе абитуриенты проходили предварительное тестирование, по
результатам которого они могут быть допущены к сдаче вступительных экзаменов в
первом потоке. Тестирование проводится по трём предметам, по каждому предмету
абитуриент может набрать от 0 100 баллов. При этом к сдаче экзаменов в первом
потоке допускаются абитуриенты,
набравшие по результатам тестирования не менее 30 баллов по каждому из трёх предметов, причём сумма баллов должна быть не менее 140. На вход программы подаются сведения о результатах предварительного тестирования. Известно, что общее количество участников тестирования не превосходит 500.
набравшие по результатам тестирования не менее 30 баллов по каждому из трёх предметов, причём сумма баллов должна быть не менее 140. На вход программы подаются сведения о результатах предварительного тестирования. Известно, что общее количество участников тестирования не превосходит 500.
В первой строке вводится количество абитуриентов,
принимавших участие в тестировании, N. Далее следуют N
строк, имеющих следующий формат:
<Фамилия> <Имя> <Баллы>
Здесь <Фамилия>
– строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов, <Баллы> – строка, содержащая два
целых числа, разделенных пробелом – баллы, полученные на тестировании по
каждому из трёх предметов. При этом <Фамилия>
и <Имя>, <Имя> и <Баллы>
разделены одним пробелом. Пример входной строки:
Романов Вельямин 48 39 55
Напишите программу, которая будет выводить на экран фамилии
и имена абитуриентов, допущенных к сдаче экзаменов в первом потоке. *При этом
фамилии должны выводиться в алфавитном порядке.
List : array[1..500] of string;
name, temp : string;
i, j, N, ball1, ball2, ball3, count : integer;
Begin
count:=0; {счетчик допущенных к экзамену}
readln(N);
for i:=1 to N do begin
readln(temp);
{прочитать фамилию и имя}
name:='';
j:=pos(' ',temp);
name:=name+Copy(temp,1,j);
Delete(temp,1,j);
j:=pos(' ',temp);
name:=name+Copy(temp,1,j-1);
Delete(temp,1,j);
{прочитать баллы}
j:=pos(' ',temp);
ball1:=StrToInt(Copy(temp,1,j-1));
Delete(temp,1,j);
j:=pos(' ',temp);
ball2:=StrToInt(Copy(temp,1,j-1));
Delete(temp,1,j);
ball3:=StrToInt(temp);
{если допущен, то запомнить}
if (ball1>=30) and (ball2>=30) and (ball3>=30) and (ball1+ball2+ball3>=140) then
begin
count:=count+1;
List[count]:=name;
end;
end;
{сортировка по алфавиту}
for i:=1 to count-1 do
for j:=1 to count-i do
if List[j]> List[j+1] then
begin
temp:=List[j];
List[j]:=List[j+1];
List[j+1]:=temp;
end;
{вывод списка}
for i:=1 to count do writeln(List[i]);
End.
Возможное решение:
VarList : array[1..500] of string;
name, temp : string;
i, j, N, ball1, ball2, ball3, count : integer;
Begin
count:=0; {счетчик допущенных к экзамену}
readln(N);
for i:=1 to N do begin
readln(temp);
{прочитать фамилию и имя}
name:='';
j:=pos(' ',temp);
name:=name+Copy(temp,1,j);
Delete(temp,1,j);
j:=pos(' ',temp);
name:=name+Copy(temp,1,j-1);
Delete(temp,1,j);
{прочитать баллы}
j:=pos(' ',temp);
ball1:=StrToInt(Copy(temp,1,j-1));
Delete(temp,1,j);
j:=pos(' ',temp);
ball2:=StrToInt(Copy(temp,1,j-1));
Delete(temp,1,j);
ball3:=StrToInt(temp);
{если допущен, то запомнить}
if (ball1>=30) and (ball2>=30) and (ball3>=30) and (ball1+ball2+ball3>=140) then
begin
count:=count+1;
List[count]:=name;
end;
end;
{сортировка по алфавиту}
for i:=1 to count-1 do
for j:=1 to count-i do
if List[j]> List[j+1] then
begin
temp:=List[j];
List[j]:=List[j+1];
List[j+1]:=temp;
end;
{вывод списка}
for i:=1 to count do writeln(List[i]);
End.
Комментариев нет:
Отправить комментарий