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

news2024/12/24 12:36:45

在这里插入图片描述

华为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 版本

# 导入所需的模块
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

    # 第一行是国家数量N
    N = 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 版本

// 定义国家类
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');

    // 第一行是国家数量N
    const 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.coloradmin.cn/o/2194239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Electron桌面应用打包现有的vue项目

1 环境准备 Node&#xff1a;v16.20.2&#xff08;本地vue项目nodejs版本&#xff09;Electron&#xff1a;22.3.7vue&#xff1a;2 版本管理 2 Vue项目准备 更新相关依赖npm install --registry https://registry.npmmirror.com/npm run dev 3、引入Electorn 安装指定版…

基于C语言的排序

排序的概念 &#xff1a; 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c…

Hadoop大数据入门——Hive-SQL语法大全

Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法&#xff0c;在语法描述中出现&#xff1a; []&#xff0c;表示可选&#xff0c;如上[LOCATI…

课堂点名系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;论坛信息管理&#xff0c;基础数据管理&#xff0c;课程信息管理&#xff0c;课程考勤管理&#xff0c;轮播图信息 微信端账号功能包括&#xff1a;系统首页&#xff0c;论坛信…

【深度强化学习】DDPG+popart技巧(最详解)

文章目录 前言遇到的困难参考最后实现情况 一、popart 是什么&#xff1f;&#xff08;论文解读&#xff09;具体的理解关于mappo原代码中debiasing_term 二、复刻popart主要进行了什么操作&#xff1f;1.art&#xff1a;2.pop:3.算法理解4.上述未考虑的部分(关键) 三、代码实现…

传感器模块编程实践(三)舵机+超声波模块融合DIY智能垃圾桶模型

文章目录 一.概要二.实验模型原理1.硬件连接原理框图2.控制原理 三.实验模型控制流程四.智能感应垃圾桶模型程序五.实验效果视频六.小结 一.概要 随着科技的飞速发展和环保意识的日益增强&#xff0c;智能垃圾桶成为了城市生活的新宠&#xff0c;智能垃圾桶人们无需接触垃圾桶…

【Linux系统编程】第二十八弹---构建基础文件操作库与理解标准错误流(stderr)在C与C++中的应用

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、封装简单的库 1.1、定义文件结构 1.2、打开文件 1.3、刷新缓冲区 1.4、写文件 1.5、关闭文件 1.6、各文件代码 2、s…

医院管理新趋势:Spring Boot技术引领

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

Github优质项目推荐 - 第五期

文章目录 Github优质项目推荐 - 第五期一、【localsend】&#xff0c;47.5k stars - 附近设备文件互传二、【Pake】&#xff0c;29.9k stars - 网页变成桌面应用三、【laravel-crm】&#xff0c;10.7k stars - CRM 解决方案四、【localstack】&#xff0c;55.7k stars - 本地 A…

【C++】二叉搜索树+变身 = 红黑树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、定义与性质二、红黑树节点的定义三、新增节点插入四、验证红黑树五、AVL树和红黑树比较 前言 本文仅适合了…

【算法】DFS系列之 FloodFill 算法

【ps】本篇有 7 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;图像渲染 .1- 题目解析 .2- 代码编写 2&#xff09;岛屿数量 .1- 题目解析 .2- 代码编写 3&#xff09;岛屿的最大面积 .1- 题目解析 .2- 代码编写 4&#xff09;被围绕的区域 .1-…

allegro精确画圆形边框

1.显示原点位置&#xff1a; 2.class-subclass依次选择Board Geometry-Outline 3.菜单ADD---Circle,右侧option,依次设置如下&#xff0c;如图可设置为圆心&#xff08;0&#xff0c;0&#xff09;&#xff0c;半径为42mm的边框&#xff0c;不要忘了右键Done&#xff0c;完成绘…

海量数据去重的hash,布隆过滤器Bloom Filter,一致性hash

文章目录 一、⭐hash函数如何选取hash函数&#xff1f;冲突处理 二、⭐海量数据去重布隆过滤器**布隆过滤器介绍**布隆过滤如何应用 三、⭐一致性哈希基本原理&#xff1a; 四、⭐一道面试题 一、⭐hash函数 hash函数的作⽤&#xff1a;避免插⼊的时候字符串的⽐较&#xff0c…

怎么把店铺地址弄上高德地图?

随着互联网的高度普及&#xff0c;如今的营销方式也发生了巨大的变化。以前的商家要想提高店铺销售额&#xff0c;只需要在线下举办促销活动就可以吸引周边的顾客上门消费&#xff0c;但现在&#xff0c;商家如果想获取更多客流量&#xff0c;就必须在网上进行曝光&#xff0c;…

性能测试学习6:jmeter安装与基本配置/元件

一.JDK安装 官网&#xff1a;https://www.oracle.com/ 二.Jmeter安装 官网&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 下载zip包&#xff0c;zip后缀那个才是Windows系统的jmeter 三.Jmeter工作目录介绍 四.Jmeter功能 1&#xff09;修改默认配置-汉化 2&am…

市场价值99的likeyun付费进群插件

市场价值99的likeyun付费进群插件 这款是引流宝的付费插件 要搭配引流宝使用 多模版 最近发现好多人再倒卖大佬的付费插件 为了减少这种情况&#xff0c;在征得大佬的同意下决定免费发出来 此版本是付费进群最新1.0版本 不提供后续更新服务&#xff0c;有能力的还是建议支持…

每日OJ题_牛客_乒乓球筐_哈希_C++_Java

目录 牛客_乒乓球筐_哈希 题目解析 C代码 Java代码 牛客_乒乓球筐_哈希 乒乓球筐__牛客网 (nowcoder.com) 描述&#xff1a; nowcoder有两盒&#xff08;A、B&#xff09;乒乓球&#xff0c;有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类&#…

深入理解 Spring Cache 的工作原理及集成其它第三方缓存

目录 1、Spring Cache 简介2、常用注解2.1、常用注解介绍2.2、常用注解的主要参数 3、缓存注解上 SPEL 表达式可使用的元数据4、入门案例4.1、引入依赖4.2、开启缓存功能4.3、使用缓存4.3.1、新建一个 UserServiceImpl4.3.2、新建一个 UserController 5、工作原理5.1、缓存自动…

Java建筑行业智能化管理系统源码,PC端、手机端、大屏端源码,智慧工地管理平台源码,智慧建设平台 智慧住建平台

智慧工地平台全套源码合作 智慧工地是指运用现代信息技术&#xff0c;如物联网&#xff08;IoT&#xff09;、大数据、人工智能&#xff08;AI&#xff09;、云计算、移动互联网等&#xff0c;对传统建筑工地进行智能化改造和管理的新型工地。它通过高度集成的系统和设备&#…