华为OD机试 - 奖牌榜排名(Python/JS/C/C++ 2024 E卷 100分)

news2024/11/24 22:53:12

在这里插入图片描述

华为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/2196393.html

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

相关文章

Python面向对象编程:属性和方法②

文章目录 一、什么是属性和方法1.1 属性1.2 方法 二、定义和使用属性2.1 定义实例属性2.2 访问和修改实例属性2.3 定义类属性2.4 访问和修改类属性 三、定义和使用方法3.1 定义实例方法3.2 调用实例方法3.3 定义类方法3.4 调用类方法3.5 定义静态方法3.6 调用静态方法 四、综合…

ChatGPT背景下,高职人工智能技术应用专业的人才培养

一、引言 ChatGPT&#xff0c;即聊天生成预训练变换器&#xff0c;由美国OpenAI公司开发&#xff0c;自2022年11月首次亮相以来&#xff0c;已成为人工智能领域的一个标志性成就。这款聊天机器人利用先进的人工智能技术&#xff0c;处理自然语言&#xff0c;能够精准把握用户的…

【实战教程】SpringBoot全面指南:快速上手到项目实战(SpringBoot)

文章目录 【实战教程】SpringBoot全面指南&#xff1a;快速上手到项目实战(SpringBoot)1. SpringBoot介绍1.1 SpringBoot简介1.2系统要求1.3 SpringBoot和SpringMVC区别1.4 SpringBoot和SpringCloud区别 2.快速入门3. Web开发3.1 静态资源访问3.2 渲染Web页面3.3 YML与Properti…

ctf.bugku - 本地管理员

题目来源&#xff1a;本地管理员 - Bugku CTF 访问页面 页面的最后返回一个字符串&#xff1b; 结尾 应该是base64 编码&#xff1b; 解码得到 test123 同时&#xff0c;提示信息还有 IP禁止访问&#xff0c;本地管理员登陆&#xff1b; 所以&#xff0c;请求头添加&#x…

“欢迎”相关英语表达柯桥成人商务英语口语学习到蓝天广场

1.某地的欢迎标语 说到欢迎&#xff0c;小编想起了江苏的欢迎标语。 这则标语把“江苏欢迎您”&#xff0c;翻译成了“Jiangsu welcomes you”。 不少小伙伴都觉得这样翻译不对&#xff0c;“欢迎您来某某地方”&#xff0c;应该翻译成“Welcome to XX”。 但其实&#xff0c;一…

超声波气象监测站的工作原理

TH-CQX5超声波气象监测站&#xff0c;顾名思义&#xff0c;是一种通过超声波技术实现气象数据监测的设备。这种监测站的设计理念充分利用了超声波在空气中传播的特性&#xff0c;能够高效、准确地测量风速、风向、温度、湿度等气象要素。超声波气象监测站的构造简洁而高效&…

华为OD机试 - 银行插队 - 队列(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

前端vue-安装pinia,它和vuex的区别

创建一个store的目录&#xff0c;任意一个js文件&#xff0c;再导入pinia&#xff0c;再定义

想走?可以!先买票——迭代器模式

文章目录 想走&#xff1f;可以&#xff01;先买票——迭代器模式乘车买票&#xff0c;不管你是谁&#xff01;迭代器模式迭代器实现Java的迭代器实现迭代高手 想走&#xff1f;可以&#xff01;先买票——迭代器模式 乘车买票&#xff0c;不管你是谁&#xff01; 时间&#…

【2024版】最新kali linux入门及常用简单工具介绍(非常详细)零基础入门到精通,收藏这一篇就够了_kalilinux

一、介绍 kali Linux Kali Linux 是一个基于 Debian 的 Linux 发行版&#xff0c;主要用于数字取证和渗透测试。它预装了大量的安全审计和渗透测试工具&#xff0c;被广泛应用于网络安全领域。 &#xff08;一&#xff09;特点 工具丰富&#xff1a;集成了数百种用于渗透测试…

越差越好?为什么简单反而赢了,这背后究竟有什么秘诀?

你有没有发现,软件界里那些最成功的产品,往往并不是最复杂、最强大的?我们用的很多东西,看起来功能普通,甚至有些粗糙,但就是这样简陋的设计,反而成了市场上的赢家。 也许你玩过Flappy Bird这个游戏:它的设计非常简单,玩家只需要点击屏幕让小鸟飞行,避开管道障碍。游…

知名开发工具RubyMine全新发布v2024.2——增加浏览器保护的代码洞察

RubyMine 是一个为Ruby 和 Rails开发者准备的 IDE&#xff0c;其带有所有开发者必须的功能&#xff0c;并将之紧密集成于便捷的开发环境中。 立即获取RubyMine v2024.2正式版 具体更新详情如下&#xff1a; Rails 对Kamal配置文件的补全 RubyMine现在为 Kamal 配置文件提供…

代码随想录算法训练营Day28 | 39. 组合总和、40.组合总和Ⅱ、131.分割回文串

目录 39. 组合总和 40.组合总和Ⅱ 131.分割回文串 39. 组合总和 题目 39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不…

Pytorch实现CNN实验

一、实验要求 用 python 的 Pytorch模块实现卷积神经网络。网络结构为一个输入层、两个卷积层、一个全连接层、一个输出层。 二、实验目的 实现一个包含卷积层、池化层和全连接层的卷积神经网了解如何在训练数据集上使用反向传播算法和Adam优化算法训练神经网络。加深对卷积…

国外电商系统开发-运维系统文件上传-高级上传

如果您要上传文件到10台服务器中&#xff0c;有3台服务器的路径不是一样的&#xff0c;那么在这种情况下您就可以使用本功能&#xff0c;单独执行不一样的路径 点击【高级】上传

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求 内网部署safeline&#xff0c;通过frp让外网访问内部web网站服务&#xff0c;让safeline记录真实外网攻击IP safeline 跟 frp都部署在同一台服务器&#xff1a;192.168.2.103 frp client 配置 frpc只需要在https上添加transport.proxyProtocolVersion "v2"即…

【星汇极客】STM32 HAL库+CubeMX开发之用户代码规范(持续更新)

前言 本人是一名嵌入式学习者&#xff0c;在大学期间也参加了不少的竞赛并获奖&#xff0c;包括&#xff1a;江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三等。 暑假的时候参加了太多的比赛&#…

ComfyUI 实战教程:古人画像变真人

最近看到一种古画变真人的效果&#xff0c;就是将书上的古人画像重绘为真人&#xff0c;效果炸裂&#xff0c;不敢独享&#xff0c;特别分享给大家。 效果演示 废话不多说&#xff0c;还是先看效果。大家可以猜猜它们都是谁&#xff5e; 使用方法 这个方法在 Stable Diffusi…

斩获ICDAR历史地图OCR比赛冠军:我们如何处理密集旋转交叉文本?

ICDAR 比赛简介 ICDAR 比赛 https://rrc.cvc.uab.es/是国际公认的文字领域权威的比赛&#xff0c;文字领域顶会论文里的数据测评和测评指标往往都来源于ICDAR比赛的数据和指标&#xff0c;每年一般会有几个大类的赛事&#xff0c;然后每个赛事会细分3-4个比赛。ICDAR竞赛因其极…

APP未上架开通微信支付流程分享

在移动互联网时代&#xff0c;支付功能的便捷性对于APP的成功至关重要。即便APP尚未上架至应用商店&#xff0c;开发者仍可以提前开通微信支付功能&#xff0c;以便进行内部测试、预售活动或特定场景下的支付需求。本文将详细介绍APP未上架时如何开通微信支付的流程&#xff0c…