题目描述
先按每个学生总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面。依次表示前5名学生的学号和总分。样例输入
690 67 8087 66 9178 89 9188 99 7767 89 6478 89 98样例输出
6 2654 2643 2582 2441 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.