app下载安装官方网站,柳州高端网站建设,网站广告设计,网站 栏目 英语华为OD机试 2024E卷题库疯狂收录中#xff0c;刷题点这里 专栏导读
本专栏收录于《华为OD机试#xff08;JAVA#xff09;真题#xff08;E卷D卷A卷B卷C卷#xff09;》。
刷的越多#xff0c;抽中的概率越大#xff0c;私信哪吒#xff0c;备注华为OD#xff0c;加… 华为OD机试 2024E卷题库疯狂收录中刷题点这里 专栏导读
本专栏收录于《华为OD机试JAVA真题E卷D卷A卷B卷C卷》。
刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新全天CSDN在线答疑。
一、题目描述
2012年伦敦奥运会即将到来大家都非常关注奖牌榜的情况现在我们假设奖牌榜的排名规则如下
首先gold medal数量最多的排在前面其次silver medal数量最多的排在前面然后bronze medal数量最多的排在前面若以上三个条件仍无法区分名次则以国家名称的字典顺序排定。
我们假设国家名称由通过二十六个字母各奖牌数据不超过100且大于0。
二、输入描述
第一行输入一个整数N0 N 21代表国家数量
然后接下来的N行每行包含 一个字符串Name表示各个国家的名称和三个整数Gi, Si, Bi表示每个国家获得的gold medal, silver medal, bronze medal的数量以空格隔开如China 51 20 21。
具体见样例输入。
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
四、测试用例
测试用例1
1、输入
4 Germany 10 10 10 Austria 10 10 10 Belgium 10 10 10 Denmark 10 10 10
2、输出
Austria Belgium Denmark Germany
3、说明
测试用例2
1、输入
6 India 15 20 25 Australia 15 20 20 NewZealand 15 20 25 SouthAfrica 10 30 40 Italy 15 25 20 Spain 15 20 25
2、输出
Italy India NewZealand Spain Australia SouthAfrica
3、说明
五、解题思路
数据存储首先我们需要存储每个国家的名称及其金、银、铜牌数量。可以定义一个 Country 类来表示每个国家其中包含名称和三种奖牌的数量。排序规则根据题目描述排序需要按照以下优先级 金牌数量降序银牌数量降序铜牌数量降序 国家名称的字典顺序升序 为了实现这一排序规则可以让 Country 类实现 Comparable 接口并在 compareTo 方法中按照上述规则进行比较。 数据结构使用 ArrayList 来存储所有国家的信息。读取所有输入后使用 Collections.sort 方法对列表进行排序。输入输出使用 Scanner 类读取输入按照题目要求读取国家数量和每个国家的详细信息。排序后按顺序输出每个国家的名称。测试在编写代码后通过示例输入和自定义的五个测试用例来验证代码的正确性。
六、Java算法源码
public class OdTest {// 定义国家类实现Comparable接口以便排序static class Country implements ComparableCountry {String name; // 国家名称int gold; // 金牌数量int silver; // 银牌数量int bronze; // 铜牌数量public Country(String name, int gold, int silver, int bronze) {this.name name;this.gold gold;this.silver silver;this.bronze bronze;}Overridepublic int compareTo(Country other) {// 按金牌数量降序if (this.gold ! other.gold) {return other.gold - this.gold;}// 金牌相同按银牌数量降序if (this.silver ! other.silver) {return other.silver - this.silver;}// 银牌相同按铜牌数量降序if (this.bronze ! other.bronze) {return other.bronze - this.bronze;}// 三种奖牌数量都相同按国家名称字典顺序升序return this.name.compareTo(other.name);}}public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取国家数量int N scanner.nextInt();ListCountry countries 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();countries.add(new Country(name, gold, silver, bronze));}// 对国家列表进行排序Collections.sort(countries);// 输出排序后的国家名称for (Country country : countries) {System.out.println(country.name);}scanner.close();}
}七、效果展示
1、输入
7 India 15 20 25 Australia 15 20 15 NewZealand 15 10 25 SouthAfrica 10 30 40 Italy 15 25 20 Spain 15 40 25 China 20 30 40
2、输出
China Spain Italy India Australia NewZealand SouthAfrica
3、说明 下一篇华为OD机试 - 简易内存池 - 逻辑分析Java 2024 E卷 200分
本文收录于华为OD机试JAVA真题E卷D卷A卷B卷C卷
刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新全天CSDN在线答疑。