题目描述:
奥运会开始了,想请你为各个国家和地区做奖牌排序,按照金牌>银牌>铜牌的格式进行排序
输入:
第一行 告诉你共有n个国家
接来下的n 行 每行三个数字 分别代表 金牌数量 银牌数量 铜牌数量 中间用空格隔开
输出:
输出n行 每行三个数字 按照题意进行排序
样例输入:
5 1 2 3 2 3 4 1 4 6 1 4 3 0 3 4
样例输出:
2 3 4 1 4 6 1 4 3 1 2 3 0 3 4
分析:
这道题是一道排序问题,在于一次比较金银铜三个奖牌的数量,需要我们自己写一个排序方法,即Comparator。
一开始我想过直接将三个数转成String类型然后用String类型降序进行比较,但后来会发现一个问题,这么比的话1 1 16是小于1 1 5的,因为他第5个位置1<5,但实际上这是不正确的,所以我们要将这个数组重写以恶个排序规则来进行实现。
代码实现:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int[][] a=new int[n][3];
for(int i=0;i<n;i++) {
for(int j=0;j<3;j++){
int m=sc.nextInt();
a[i][j]=m;
}
}
Comparator comparator=new Comparator() {
@Override
public int compare(Object o1, Object o2) {
int[] arr1=(int [])o1;
int[] arr2=(int [])o2;
if(arr1[0]!=arr2[0]){
return arr2[0]-arr1[0];
}
if(arr1[1]!=arr2[1]){
return arr2[1]-arr1[1];
}
if(arr1[2]!=arr2[2]){
return arr2[2]-arr1[2];
}else{
return 0;
}
}
};
Arrays.sort(a,comparator);
for(int i=0;i<n;i++) {
for(int j=0;j<3;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}