P1093 奖学金

题目描述

先按每个学生总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面。依次表示前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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值