华为OD机试 - 冠亚军排名(Python/JS/C/C++ 2024 E卷 100分)

news/2024/10/8 1:36:32/

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

2012年伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下:

  1. 首先gold medal数量最多的排在前面;
  2. 其次silver medal数量最多的排在前面;
  3. 然后bronze medal数量最多的排在前面;
  4. 若以上三个条件仍无法区分名次,则以国家名称的字典顺序排定。

我们假设国家名称由通过二十六个字母,各奖牌数据不超过100,且大于0。

二、输入描述

第一行输入一个整数N(0 < 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、说明

五、解题思路

  1. 数据存储:首先,我们需要存储每个国家的名称及其金、银、铜牌数量。可以定义一个 Country 类来表示每个国家,其中包含名称和三种奖牌的数量。
  2. 排序规则:根据题目描述,排序需要按照以下优先级:
    • 金牌数量降序
    • 银牌数量降序
    • 铜牌数量降序
  3. 国家名称的字典顺序升序
    • 为了实现这一排序规则,可以让 Country 类实现 Comparable 接口,并在 compareTo 方法中按照上述规则进行比较。
  4. 数据结构:使用 ArrayList 来存储所有国家的信息。读取所有输入后,使用 Collections.sort 方法对列表进行排序。
  5. 输入输出:使用 Scanner 类读取输入,按照题目要求读取国家数量和每个国家的详细信息。排序后,按顺序输出每个国家的名称。
  6. 测试:在编写代码后,通过示例输入和自定义的五个测试用例来验证代码的正确性。

六、Python算法源码

python"># Python 版本# 导入所需的模块
import sys# 定义国家类
class Country:def __init__(self, name, gold, silver, bronze):self.name = name        # 国家名称self.gold = gold        # 金牌数量self.silver = silver    # 银牌数量self.bronze = bronze    # 铜牌数量# 主函数
def main():# 读取输入的所有行input_lines = sys.stdin.read().splitlines()if not input_lines:return# 第一行是国家数量NN = int(input_lines[0].strip())countries = []# 读取接下来的N行,每行包含国家名称及金银铜牌数量for i in range(1, N + 1):parts = input_lines[i].strip().split()name = parts[0]gold = int(parts[1])silver = int(parts[2])bronze = int(parts[3])countries.append(Country(name, gold, silver, bronze))# 按照金牌、银牌、铜牌降序,名称升序排序countries_sorted = sorted(countries, key=lambda x: (-x.gold, -x.silver, -x.bronze, x.name))# 输出排序后的国家名称for country in countries_sorted:print(country.name)# 调用主函数
if __name__ == "__main__":main()

七、JavaScript算法源码

javascript">// JavaScript 版本// 定义国家类
class Country {constructor(name, gold, silver, bronze) {this.name = name;       // 国家名称this.gold = gold;       // 金牌数量this.silver = silver;   // 银牌数量this.bronze = bronze;   // 铜牌数量}
}// 主函数
function main() {const fs = require('fs');const input = fs.readFileSync('/dev/stdin', 'utf8').trim().split('\n');// 第一行是国家数量Nconst N = parseInt(input[0]);const countries = [];// 读取接下来的N行,每行包含国家名称及金银铜牌数量for (let i = 1; i <= N; i++) {const parts = input[i].trim().split(' ');const name = parts[0];const gold = parseInt(parts[1]);const silver = parseInt(parts[2]);const bronze = parseInt(parts[3]);countries.push(new Country(name, gold, silver, bronze));}// 按照金牌、银牌、铜牌降序,名称升序排序countries.sort((a, b) => {if (b.gold !== a.gold) return b.gold - a.gold;           // 金牌降序if (b.silver !== a.silver) return b.silver - a.silver; // 银牌降序if (b.bronze !== a.bronze) return b.bronze - a.bronze; // 铜牌降序return a.name.localeCompare(b.name);                     // 名称升序});// 输出排序后的国家名称countries.forEach(country => {console.log(country.name);});
}// 调用主函数
main();

八、C算法源码

/* C 版本 */#include <stdio.h>
#include <string.h>
#include <stdlib.h>// 定义国家结构体
typedef struct {char name[101];   // 国家名称int gold;         // 金牌数量int silver;       // 银牌数量int bronze;       // 铜牌数量
} Country;// 比较函数,用于qsort排序
int compare(const void* a, const void* b) {Country* c1 = (Country*)a;Country* c2 = (Country*)b;// 按金牌数量降序if (c2->gold != c1->gold)return c2->gold - c1->gold;// 按银牌数量降序if (c2->silver != c1->silver)return c2->silver - c1->silver;// 按铜牌数量降序if (c2->bronze != c1->bronze)return c2->bronze - c1->bronze;// 按国家名称字典顺序升序return strcmp(c1->name, c2->name);
}int main() {int N;// 读取国家数量if (scanf("%d", &N) != 1)return 0;Country countries[N];// 读取每个国家的信息for (int i = 0; i < N; i++) {scanf("%s %d %d %d", countries[i].name, &countries[i].gold, &countries[i].silver, &countries[i].bronze);}// 对国家数组进行排序qsort(countries, N, sizeof(Country), compare);// 输出排序后的国家名称for (int i = 0; i < N; i++) {printf("%s\n", countries[i].name);}return 0;
}

九、C++算法源码

// C++ 版本#include <bits/stdc++.h>
using namespace std;// 定义国家结构体
struct Country {string name;    // 国家名称int gold;       // 金牌数量int silver;     // 银牌数量int bronze;     // 铜牌数量
};// 比较函数,用于排序
bool compareCountries(const Country &a, const Country &b) {if (a.gold != b.gold)return a.gold > b.gold;          // 金牌降序if (a.silver != b.silver)return a.silver > b.silver;      // 银牌降序if (a.bronze != b.bronze)return a.bronze > b.bronze;      // 铜牌降序return a.name < b.name;              // 名称升序
}int main(){int N;// 读取国家数量cin >> N;vector<Country> countries;// 读取每个国家的信息for(int i = 0; i < N; ++i){Country c;cin >> c.name >> c.gold >> c.silver >> c.bronze;countries.push_back(c);}// 对国家向量进行排序sort(countries.begin(), countries.end(), compareCountries);// 输出排序后的国家名称for(auto &c : countries){cout << c.name << endl;}return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.ppmy.cn/news/1535936.html

相关文章

六.应用层

目录 ​编辑 4.11 DHCP 6.1应用层的概述 6.2网络应用模型 CS P2P 6.3DNS 域名 www是什么&#xff0c;http是什么&#xff0c;到底什么区别&#xff1f; DNS出现及演化 DNS概括 DNS域名解析过程 6.4FTP FTP客户/服务器 FTP工作原理 FTP传输模式 6.5电子邮件 电…

微服务JMeter解析部署使用全流程

目录 1、介绍 2、下载 3、运行 4、设置简体中文版 5、开始测试 1、添加线程组 2、添加监听器 3、添加请求 先.测试userController里的查询方法 6、查看结果 1、查看结果树 2、汇总报告 3、聚合报告 7、JMeter报错 1、介绍 Apache JMeter 是 Apache 组织基于 Java…

Python知识点:如何使用Kafka与Python进行流数据处理

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 如何使用Kafka与Python进行流数据处理 Apache Kafka是一个流行的分布式流处理平…

实验 | 使用本地大模型从论文PDF中提取结构化信息

非结构文本、图片、视频等数据是待挖掘的数据矿藏&#xff0c; 在经管、社科等研究领域中谁拥有了_从非结构提取结构化信息的能力_&#xff0c;谁就拥有科研上的数据优势。正则表达式是一种强大的文档解析工具&#xff0c;但它们常常难以应对现实世界文档的复杂性和多变性。而随…

【CSS】水平垂直居中

给父盒子设置属性 flex display: flex;写在父元素上这就是定义了一个伸缩容器justify-content&#xff1a;center 设置主轴对齐方式为居中&#xff0c;默认是横轴。子元素居中。align-items&#xff1a;center 设置纵轴对齐方式为居中&#xff0c;默认是纵轴。子元素居中。 给…

qt_c++_xml存这种复杂类型

demo&#xff0c;迅雷链接。或者我主页上传的资源 链接&#xff1a;https://pan.xunlei.com/s/VO8bIvYFfhmcrwF-7wmcPW1SA1?pwdnrp4# 复制这段内容后打开手机迅雷App&#xff0c;查看更方便 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include…

智能手表(Smart Watch)项目

文章目录 前言一、智能手表&#xff08;Smart Watch&#xff09;简介二、系统组成三、软件框架四、IAP_F411 App4.1 MDK工程结构4.2 设计思路 五、Smart Watch App5.1 MDK工程结构5.2 片上外设5.3 板载驱动BSP5.4 硬件访问机制-HWDataAccess5.4.1 LVGL仿真和MDK工程的互相移植5…

【MySQL】子查询、合并查询、表的连接

目录 一、子查询 1、单行子查询 显示SMITH同一部门的员工信息 2、多行子查询 in关键字 查询和10号部门的工作岗位相同的雇员的名字、岗位、工资、部门号&#xff0c;但是筛选出的雇员的部门不能有10号部门 all关键字 查询工资比30号部门中所有雇员工资高的雇员的姓名、…