помогите пожалуйста, даю 30 баллов
Дан массив записей, каждая из которых состоит из Фамилии и имени учащегося и результата,
полученного на районной олимпиаде. Необходимо вывести фамилии трех победителей в
порядке убывания балла и место, которое они заняли. Если есть несколько учащихся с
одинаковым баллом, выводятся все фамилии.
Данные подаются на вход в следующем формате: число участников n, за которым следуют n строк
(n>3)
Пример:
5
Иванов Вася 100
Петров Федя 150
Сидоров Сеня 99
Катаев Вова 120
Пупкин Вася 120
Программа должна вывести:
Петров Федя – 1 место
Катаев Вова – 2 место
Пупкин Вася -2 место
Иванов Вася – 3 место
Указание. При сохранении записей использовать динамический массив.
Ответ
0/5 (0 оценок)
1
leoden03 1 месяц назад
Светило науки - 3 ответа - 0 раз оказано помощи

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 место')

leoden03 1 месяц назад

Только что проверил, работает безукоризненно для любых баллов и количеств победителей. Надеюсь не слишком сложно))

leoden03 1 месяц назад

Если помог, отпишись в вк пожалуйста id177434561

leoden03 1 месяц назад

более короткая, понятная и правильная версия решения:

leoden03 1 месяц назад

https://pastebin.com/gsxj65jF

Ответ
0/5 (0 оценок)
0
Puz1koO 1 месяц назад
Светило науки - 28 ответов - 0 раз оказано помощи

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.