题目
2012伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下.
1.首先gold medal数量多的排在前面
2.其次silver medal数量多的排在前面
3.然后bronze medal数量多的排在前面
4.若以上三个条件仍无法区分名次,则以国家名称的字典顺序排定
我们假设国家名称不超过二十个字符,各类奖牌数不超过100,且大于0
输入描述第一行输入一个整数N(0<N<21),代表国家数量
然后接下来的N行,每行包含1个字符串Name,表示各个国家的名称和三个整数Gi.Si,Bi表示每个获得的gold medal.silver medal.bronze medal的数量,以空格隔开,如(China 51 2021)。
具体见样例输入。
输出描述输出奖牌榜的依次顺序,只输出国家名称,各占一行,具体见样例输出
示例1:
输入5
China 32 28 34
England 12 34 22
France 23 33 2
Japan 12 34 25
Rusia 23 43 0
输出China
Rusia
France
Japan
England
说明无
思路
自定义对象排序,送分题
题解
java
package hwod;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class CountrySort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
List<CountryMedal> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
String[] splits = sc.nextLine().split(" ");
list.add(new CountryMedal(splits[0], Integer.parseInt(splits[1]), Integer.parseInt(splits[2]), Integer.parseInt(splits[3])));
}
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getName());
}
}
}
class CountryMedal implements Comparable<CountryMedal> {
private String name;
private int gold;
private int silver;
private int bronze;
public CountryMedal(String name, int gold, int silver, int bronze) {
this.name = name;
this.gold = gold;
this.silver = silver;
this.bronze = bronze;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(CountryMedal o) {
if(this.gold!=o.gold) return o.gold - this.gold;
if(this.silver!=o.silver) return o.silver - this.silver;
if(this.bronze!=o.bronze) return o.bronze - this.bronze;
return this.name.compareTo(o.name);
}
}
推荐
如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。