题目描述
先按每个学生总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面。依次表示前5名学生的学号和总分。
样例输入
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
样例输出
6 265
4 264
3 258
2 244
1 237
思路
O(5n)
按题意排序,只需要保留前五名。
var
i,j,k,l,m,n,z:longint;
a,b,c:
array[
1..
5]
of longint;
begin
readln(l);
for i:=
1 to l
do
begin
readln(m,n,z);
z:=z+n+m;
k:=
6;
for j:=
1 to 5 do
if z>=a[k-
1]
then
if z=a[k-
1]
then
begin
if m>c[k-
1]
then dec(k)
else
if (m=c[k-
1])
and(i<b[k-
1])
or(b[k-
1]=
0)
then
dec(k);
end
else dec(k);
if k<=
5 then
begin
for j:=
5 downto k+
1 do
begin
a[j]:=a[j-
1];
b[j]:=b[j-
1];
c[j]:=c[j-
1];
end;
a[k]:=z;
b[k]:=i;
c[k]:=m;
end;
end;
for i:=
1 to 5 do
writeln(b[i],
' ',a[i]);
end.
转载请注明原文地址: https://ju.6miu.com/read-658833.html