помогите пожалуйста, даю 30 баллов
Дан массив записей, каждая из которых состоит из Фамилии и имени учащегося и результата,
полученного на районной олимпиаде. Необходимо вывести фамилии трех победителей в
порядке убывания балла и место, которое они заняли. Если есть несколько учащихся с
одинаковым баллом, выводятся все фамилии.
Данные подаются на вход в следующем формате: число участников n, за которым следуют n строк
(n>3)
Пример:
5
Иванов Вася 100
Петров Федя 150
Сидоров Сеня 99
Катаев Вова 120
Пупкин Вася 120
Программа должна вывести:
Петров Федя – 1 место
Катаев Вова – 2 место
Пупкин Вася -2 место
Иванов Вася – 3 место
Указание. При сохранении записей использовать динамический массив.
Answers & Comments
Python
f=open('your file.txt')
f=f.readlines()
list_0=''.join(f).split('\n')
stud_count=list_0[0]
list_0=list_0[1:]
list_stud=list(map(lambda x: x.split(), list_0))
list_stud=list(map(lambda x: [x[0], x[1], int(x[2])], list_stud))
list_stud.sort(key=lambda x: x[2], reverse=True)
list_balls=list(map(lambda x: int(x[2]), list_stud))
first=list_balls.count(list_stud[0][2])
if first>1:
for i in range(first):
print(list_stud[i][0], list_stud[i][1], '- 1 место')
else:
print(list_stud[0][0], list_stud[0][1], '- 1 место')
second= list_balls.count(list_stud[first][2])
if second>1:
for i in range(first, second+first):
print(list_stud[i][0], list_stud[i][1], '- 2 место')
else:
print(list_stud[first][0], list_stud[first][1], '- 2 место')
third=list_balls.count(list_stud[first+second][2])
if third>1:
for i in range(first+second, second+first+third):
print(list_stud[i][0], list_stud[i][1], '- 3 место')
else:
print(list_stud[first+second][0], list_stud[first+second][1], '- 3 место')
type
Stud=record
fi:string;
re:byte;
end;
var
a:array of Stud;
i,m,n,max,err:integer;
x1:string;
begin
readln(n);
setlength(a,n);
dec(n);
for i:=0 to n do
with a[i] do
begin
readln(x1);
m:=pos(' ',x1,pos(' ',x1,1)+1);
fi:=copy(x1,1,m-1);
delete(x1,1,m);
val(x1,re,err);
end;
writeln;
for m:=1 to 3 do
begin
max:=0;
for i:=0 to n do
if a[i].re > max then
max:=a[i].re;
for i:=0 to n do
if a[i].re = max then
begin
writeln(a[i].fi,' -',m,' место!');
a[i].re:=0;
end;
end;
end.