华为OD机试真题 JavaScript 实现【比赛评分】【2023 B卷 100分】,附详细解题思路

news2024/11/26 16:30:22

在这里插入图片描述

一、题目描述

一个有N个选手参加比赛,选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分。打分规则为每个评委对选手打分,最高分10分,最低分1分。

请计算得分最多的3位选手的编号。如果得分相同,则得分高分值最多的选手排名靠前(10分数量相同,则比较9分的数量,以此类推,用例中不会出现多个选手得分完全相同的情况)。

二、输入描述

第一行为半角逗号分割的两个正整数,第一个数字表示M(3<=M<=10)个评委,第二个数字表示N(3<=N<=100)个选手。

第2到M+1行是半角逗号分割的整数序列,表示评委为每个选手的打分,0号下标数字表示1号选手分数,1号下标数字表示2号选手分数,依次类推。

三、输出描述

选手前3名的编号。

注:若输入为异常,输出-1,如M、N、打分不在范围内。

四、解题思路

题目要求计算得分最多的3位选手的编号,评委打分范围为1到10分,选手数量和评委数量在给定范围内。

我们可以使用一个自定义的Player类来表示选手,其中包含选手的编号、总分和每个评委的打分列表。首先,我们需要读取输入的评委数量和选手数量,并进行合法性校验。然后,读取每个评委对每个选手的打分,将评分信息存储在列表中。接下来,根据评分信息计算每个选手的总分,并创建Player对象存储选手信息。最后,按照题目要求进行排序,输出得分最高的3位选手的编号。

  1. 读取输入的评委数量和选手数量,进行合法性校验。如果不满足条件,直接输出-1并结束程序;
  2. 使用一个列表存储每个评委对每个选手的打分。遍历评委列表,读取每个评委对每个选手的打分,将打分信息存储在列表中;
  3. 创建一个空列表playerList,用于存储选手信息;
  4. 遍历选手列表,计算每个选手的总分,同时将每个选手的打分列表存储在playerList中;
  5. 使用Collections.sort对playerList进行排序;
  6. 输出得分最高的3位选手的编号,按照题目要求输出。

该算法通过读取评委和选手的打分信息,计算每个选手的总分,并按照总分和最高分数量进行排序,输出得分最高的3位选手的编号。算法的时间复杂度主要取决于排序的时间复杂度,为O(NlogN),其中N为选手的数量。

五、JavaScript算法源码

function findTopThreePlayers() {
    const readline = require('readline');

    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });

    rl.question('请输入评委数量和选手数量(以逗号分隔):', (input) => {
        const [judges, players] = input.split(',').map(Number);

        // 选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分
        if (judges < 3 || judges > 10 || players < 3 || players > 100) {
            console.log(-1);
            rl.close();
            return;
        }

        const scores = [];

        const getScores = (index) => {
            if (index === judges) {
                // 总分
                const totalScores = Array.from({length: players}, () => 0);
                for (let i = 0; i < judges; i++) {
                    for (let j = 0; j < players; j++) {
                        totalScores[j] += scores[i][j];
                    }
                }
                // 遍历选手列表,计算每个选手的总分,同时将每个选手的打分列表存储在playerList中
                const playerList = Array.from({length: players}, (_, index) => ({
                    index,
                    total: totalScores[index],
                    scores: scores.map(judgeScores => judgeScores[index])
                }));
                // 排序
                playerList.sort((a, b) => {
                    if (b.total !== a.total) {
                        return b.total - a.total;
                    }
                    for (let i = 10; i > 0; i--) {
                        const countA = a.scores.filter(score => score === i).length;
                        const countB = b.scores.filter(score => score === i).length;
                        if (countA !== countB) {
                            return countB - countA;
                        }
                    }
                    return 0;
                });

                // 输出得分最高的3位选手的编号
                const topThree = playerList.slice(0, 3).map(player => player.index + 1);
                console.log(topThree.join(','));
                rl.close();
                return;
            }

            rl.question(`请输入第${index + 1}个评委的${players}个分数(以逗号分隔):`, (input) => {
                const scoresForJudge = input.split(',').map(Number);
                scores.push(scoresForJudge);
                getScores(index + 1);
            });
        };

        getScores(0);
    });
}

findTopThreePlayers();

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651316.html

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

相关文章

Android 音视频开发核心知识点笔记整合

很多开发者都知道Android音视频开发这个概念&#xff0c;音视频开发不仅需要掌握图像、音频、视频的基础知识&#xff0c;并且还需要掌握如何对它们进行采集、渲染、处理、传输等一系列的开发和应用&#xff0c;因此&#xff0c;音视频开发是一门涉及到很多内容的领域。 随着5G…

开战在即!与全球伙伴一起打造你的数据应用,TiDB Future App Hackathon 2023 来啦!

2023 TiDB Future App Hackathon 来啦&#xff01;本届 Hackathon 的主题为&#xff1a;Code, Innovate & Build Amazing Data Applications —— 释放你的创造力、构建突破性的应用、在全球范围内寻找你的队友、体验最新最 in 的 Serverless 技术&#xff0c;更有 总计 $3…

马原第一章复习1.

一.物质的存在方式 《德法年鉴》 完成从唯物到唯心 从革命主义等到共产主义的过度 为创立马克思理论提供了根本前提《德意志形态》 首次阐述了历史唯物主义的基本观点《共产党宣言》标志着马克思主义的公开问世 也是第一个无产阶级政党的党纲《资本论》阐述剩余价值学说 解释生…

【推荐】Oracle Live SQL——在线 Oracle SQL 测试工具

最近回答了几个 CSDN “学习”功能里“问答”区的一些专业相关问题&#xff0c;回答过程中采用严谨的方式&#xff0c;在 Oracle Live SQL 上进行验证测试。这个很好用的 Oracle APEX 应用我使用好几年了&#xff0c;虽然近年来已转行 MySQL 和国产数据库领域&#xff0c;但仍然…

链表与顺序表的区别以及扩展计算机硬件的存储体系

好久没有更新文章了&#xff0c;在忙学校的事情时我还是比较怀念大家一直以来对我的关注和鼓励&#xff0c;接下来我会继续更新数据结构相关的文章&#xff0c;也请大家多多支持&#xff0c;十分感谢。正文来了&#xff1a; 首先说明一点&#xff0c;我在举例和比较时所使用的是…

【2023,学点儿新Java-02】计算机硬件与软件 | CPU、内存、硬盘概览 | 科学使用键盘——“指法” | 软件——计算机的灵魂 | 人机交互方式

前情回顾&#xff1a; 【2023&#xff0c;学点儿新Java-01】从查看本机 jdk版本 开始 | Java基础全程脉络图、Java工程师全程技术路线、Java职业晋升路线图 我们见到的太阳 是八分钟前的太阳&#xff0c;见到的月亮 是一点三秒之前的月亮&#xff0c;见到一英里之外的建筑&…

【Docker 安装 Zipkin】—— 每天一点小知识

&#x1f4a7; D o c k e r 安装 Z i p k i n \color{#FF1493}{Docker 安装 Zipkin} Docker安装Zipkin&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》…

解决vue打包一次部署到不同的服务器的问题

1. 问题描述 在工作的时候&#xff0c;往往碰到同一套vue前端代码程序需要部署到很多的服务器上&#xff0c;每次更改完程序都需要打包部署到各个服务器上&#xff0c;因为每个服务器的访问地址和端口都不一样&#xff0c;如果用的若依自带的框架&#xff0c;需要每次都需要打…

Spring Security --- 自定义登录逻辑

目录 UserDetailsService详解 返回值 方法参数 异常 PasswordEncoder密码解析器详解 接口介绍 内置解析器介绍 BCryptPasswordEncoder简介 代码演示 自定义登录逻辑 编写配置类 自定义逻辑 UserDetailsService详解 当什么也没有配置的时候&#xff0c;账号和密码是…

Vue3:计算属性、监听器

computed 计算属性 计算属性是指 基于现有状态派生 (演变) 出新的状态&#xff0c;现有状态发生变化&#xff0c;派生状态重新计算。 computed 接收回调函数作为参数&#xff0c;基于回调函数中使用的响应式数据进行计算属性的创建&#xff0c;回调函数的返回值就是基于现有状态…

软件测试什么样的技术栈才能进入大厂

我们知道&#xff0c;能在一线大厂工作是大多数人的目标&#xff0c;不仅薪酬高&#xff0c;技能提升快&#xff0c;而且能得到公司影响力背书&#xff0c;将来就算跳槽也能带来光环加持。 最近疫情的影响&#xff0c;网上也爆出了一些裁员新闻&#xff0c;可以说这个疫情确实…

【深入浅出密码学】RSA

RSA密码体制 引言&#xff1a; RSA加密的本意并不是为了取代对称密码&#xff0c;而且它比诸如AES的密码要慢很多&#xff0c;因为RSA当中涉及许多数学计算&#xff0c;RSA通常和类似AES的对称密码一起使用&#xff0c;真正用来加密大量数据的是对称密码。而RSA主要保护对称密…

Linux0.11内核源码解析-block_dev.c

目录 block_dev.c 文件的作用 int block_write(int dev, long * pos, char * buf, int count) block_dev.c 文件的作用 block_dev.c 文件的作用 block_dev.c 文件就包含两个函数&#xff0c;分别是block_read和block_write函数&#xff0c;提供给read和write系统调用 块读写…

STM32开发踩坑——基于CubeMx+Gcc移植正点原子3.5‘TFTLCD(开发环境:正点F103精英版+3.5‘TFTLCD)

成立这个专栏的目的是&#xff0c;记录自己嵌入式开发遇到的问题&#xff0c;与成功的解决方法&#xff0c;方便自己回顾。 最近在学习王维波老师的《STM32Cube高效开发教程》&#xff0c;王老师移植的是普中科技的驱动&#xff0c;而我手动移植了一下正点原子的lcd驱动&#…

【Java高级语法】(三)泛型:关于泛型最全面的讲解来了~

Java高级语法详解之泛型 :one: 概念:two: 优势:three: 使用3.1 泛型类3.2 泛型接口3.3 泛型方法 :four: 通配符&#xff08;Wildcards&#xff09;4.1 无界通配符&#xff08;Unbounded Wildcard&#xff09;4.2 上限通配符&#xff08;Upper Bounded Wildcard&#xff09;4.3 …

aardio - 【库】http访问网页

为了简化http访问操作&#xff0c;提高速度&#xff0c;丰富功能&#xff0c;特封装了此库&#xff0c;可以根据需要进行选择。 本库带一个dll&#xff0c;所以建议优先选择使用 inet.http 库&#xff1a; 如果使用 inet.http库&#xff0c;直接 inet.http.get() 速度较慢。 大…

理解3ds max中的容器的概念

实验一&#xff1a; 在场景中创建一个容器 把这个容器保存为一个文件&#xff0c;在文件夹中可看到此容器文件&#xff0c;其大小为892KB&#xff0c;同时可看到生成一个同名的lock类型文件。 将场景中的某一个物体&#xff08;面加多一点的&#xff09;添加到容器中&#x…

框架---面经

Spring 循环依赖 概念 多个实体之间相互依赖并形成闭环的情况就叫做"循环依赖”&#xff0c;也叫做”循环引用。 三级缓存解决循环依赖的原理 循环依赖的解决方案--- Feild注入单例&#xff08;AutoWired&#xff09; 直接在类的成员变量上使用Autowired注解&#xf…

SM2椭圆曲线公钥密码算法

国家密码管理局于2010年12月17日发布了SM2椭圆曲线公钥密码算法&#xff0c;并要求为对现有基于RSA算法的电子认证系统、密钥管理系统、应用系统进行升级改造。关于算法标准&#xff0c;请参见《国家密码管理局公告&#xff08;第 21 号&#xff09;》&#xff0c;网址为​​ht…

JavaWeb【总结】——(请求和响应)浏览器发送请求的方式 服务器响应的方式

本文目录 引出JavaWeb相关知识1.网页状态码web相关背景知识如何在idea中建tomcat web项目2.Web的请求request&#xff1a;get和post&#xff0c;响应response3.同步请求和异步请求Ajax&#xff0c;以及异步的Json响应4.同步jsp和异步ajax的axios下&#xff0c;转发或重定向思考…