题目描述
先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面.
样例
输入样例:
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(logn)$
java 代码
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(bf.readLine());
int[][] q= new int[n+1][3];
for(int i=1;i<=n;++i){
String[] in = bf.readLine().split(" ");
q[i][0]=i;
q[i][1]=Integer.parseInt(in[0]);
q[i][2]=q[i][1]+Integer.parseInt(in[1])+Integer.parseInt(in[2]);
}
Arrays.sort(q,1,n+1,(t1,t2)->{
if(t1[2]!=t2[2]) return Integer.compare(t2[2],t1[2]);// 降序简单写法
else if(t1[1]!=t2[1]) return Integer.compare(t2[1],t1[1]);// 降序简单写法
else return Integer.compare(t1[0],t2[0]);
});
for(int i=1;i<=5;++i)
System.out.println(q[i][0]+" "+q[i][2]);
bf.close();
}
}