1475: 金银铜奖牌排序
题目描述
奥运会开始了,想请你为各个国家和地区做奖牌排序,按照金牌>银牌>铜牌的格式进行排序
输入
第一行 告诉你共有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
这道题其实就是利用了Arrays.sort方法,不过这里因为是对二维数组进行排序所以通过传入一个自定义的比较器(Comparator<int[]>
),可以指定排序的方式。在这里,比较器通过重写compare
方法来实现按每行的第一个元素进行降序排序(第二个参数在前面就是降序,第一个参数在前面就是升序)。
compare
方法中的Integer.compare(o1[0], o2[0])
用于比较两个数组o1和o2的第一个元素(即o1[0]
和o2[0]
)。返回负数表示o1[0]
小于o2[0]
,零表示相等,正数表示o1[0]
大于o2[0]
。- 这样,当调用
Arrays.sort(arr, comparator)
时,数组arr
将按照每行第一个元素的升序顺序进行排序。反之则是降序。
java
package java基础.Test78;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[][] arr = new int[n][3];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
arr[i][j] = scanner.nextInt();
}
}
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0]!=o2[0]){
return Integer.compare(o2[0],o1[0]);
}else if(o1[1]!=o2[1]){
return Integer.compare(o2[1],o1[1]);
}else {
return Integer.compare(o2[2],o1[2]);
}
}
});
// 输出排序后的数组
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}