算法题&题目

OJ 11、Olympic Game
描述:
每次奥运会期间,大家都非常关注奖牌榜排名的情况。

现在我们假设奖牌榜的排名规则,按优先级从高到低如下:
1、金牌 数量多的排在前面;
2、银牌 数量多的排在前面;
3、铜牌 数量多的排在前面;
4、若以上三个条件仍无法区分名次,则以国家名称的字典序排列。

我们假设国家名称不超过20个字符、各种奖牌数不超过100,且大于等于0。
题目类别: 字符串,排序
难度: 中级
分数:
运行时间限制: 无限制
内存限制: 无限制
阶段: 应聘考试
输入:
第一行输入一个整数N(0

然后接下来的N行,每行包含一个字符串Namei表示每个国家的名称,和三个整数Gi、Si、Bi
分别表示每个获得的金、银、铜牌的数量,以空格隔开,如(China 51 20 21)。

具体见Sample Input。
输出:
输出奖牌榜的依次顺序,只输出国家名称,各占一行,具体见Sample Output。
样例输入:
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

代码实现:

import java.util.*;

class Country {
    String name;
    int gold, silver, bronze;

    public Country(String name, int gold, int silver, int bronze) {
        this.name = name;
        this.gold = gold;
        this.silver = silver;
        this.bronze = bronze;
    }
}

public class OlympicGame {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int N = scanner.nextInt();
        List<Country> medalists = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            String name = scanner.next();
            int gold = scanner.nextInt();
            int silver = scanner.nextInt();
            int bronze = scanner.nextInt();

            medalists.add(new Country(name, gold, silver, bronze));
        }

        // 排序
        medalists.sort((c1, c2) -> {
            if (c1.gold != c2.gold) {
                return Integer.compare(c2.gold, c1.gold);
            } else if (c1.silver != c2.silver) {
                return Integer.compare(c2.silver, c1.silver);
            } else if (c1.bronze != c2.bronze) {
                return Integer.compare(c2.bronze, c1.bronze);
            } else {
                return c1.name.compareTo(c2.name);
            }
        });

        // 输出
        for (Country country : medalists) {
            System.out.println(country.name);
        }
    }
}

这个Java程序通过创建一个 Country 类来存储每个国家的信息,然后使用 List 存储所有国家。排序时使用了一个自定义的比较器,按照金牌、银牌、铜牌数量降序排列,如果仍然相同则按国家名称的字典序升序排列。最后,遍历排序后的列表,并输出排好序的国家名称。

你可能感兴趣的:(算法)