目录

题目描述

条件如下

输入描述

输出描述

用例

算法源码


题目描述

给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。

条件如下

  1. 一个选手可以有多个射击成绩的分数,且次序不固定。
  2. 如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手。
  3. 如果选手的成绩之和相等,则成绩之和相等的选手按照其ID降序排列。

输入描述

  • 输入第一行,一个整数N,表示该场比赛总共进行了N次射击,产生N个成绩分数(2<=N<=100)。
  • 输入第二行,一个长度为N整数序列,表示参与每次射击的选手ID(0<=ID<=99)。
  • 输入第三行,一个长度为N整数序列,表示参与每次射击的选手对应的成绩(0<=成绩<=100)。

输出描述

符合题设条件的降序排名后的选手ID序列。

用例

输入

13

3,3,7,4,4,4,4,7,7,3,5,5,5

53,80,68,24,39,76,66,16,100,55,53,80,55

输出 5,3,7,4
说明

该场射击比赛进行了13次

参赛的选手为3,4,5,7

  • 3号选手成绩:53,80,55,最高3个成绩的和为:80+55+53=188。
  • 4号选手成绩:24,39,76,66,最高3个成绩的和为:76+66+39=181。
  • 5号选手成绩:53,80,55,最高3个成绩的和为:80+55+53=188。
  • 7号选手成绩:68,16,100,最高3个成绩的和为:100+68+16=184。

比较各个选手最高3个成绩的和,有3号=5号>7号>4号,由于3号和5号成绩相等且ID号5>3, 所以输出为:5,3,7,4

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});const lines = [];
rl.on("line", (line) => {lines.push(line);if (lines.length === 3) {sort(lines);lines.length = 0;}
});/* 射击成绩排序-基于对象 */
function sort(lines) {// 第一行输入:射击次数,13const count = parseInt(lines[0]);// 第二行输入:选手id,3,3,7,4,4,4,4,7,7,3,5,5,5const ids = lines[1].split(",");// 第三行输入:选手分数,53,80,68,24,39,76,66,16,100,55,53,80,55const scores = lines[2].split(",");// 将score归类到对应id中const obj = {};for (let i = 0; i < count; i++) {let key = ids[i];let val = scores[i];if (!obj[key]) {obj[key] = [];}obj[key].push(val);}/* {'3': [ '53', '80', '55' ],      '4': [ '24', '39', '76', '66' ],'5': [ '53', '80', '55' ],      '7': [ '68', '16', '100' ]      }*/const sorts = [];for (const key in obj) {// 忽略成绩少于3个的选手if (obj[key].length < 3) {delete obj[key];}// 只保留最高的三次成绩obj[key].sort((a, b) => {return b - a;});obj[key].length = 3;/* {'3': [ '53', '80', '55' ],      '4': [ '39', '76', '66' ],'5': [ '53', '80', '55' ],      '7': [ '68', '16', '100' ]      }*/// 对最高的三次成绩求和obj[key] = obj[key].reduce((pre, cur) => {return parseInt(pre) + parseInt(cur);});/* {'3': 188,      '4': 181,'5': 188,      '7': 184      }*/// 由于对象属性无法进行条件排序,所以我们需要将id:score存到数组中sorts.push({ id: key, score: obj[key] });/* [{id:'3', score:188}, {id:'4', score:181}, {id:'5', score:188}, {id:'7', score:184 }]*/}console.log(sorts.sort((s1, s2) => {return s2.score - s1.score? s2.score - s1.score: s2.id - s1.id? s2.id - s1.id: 0;}).map((item) => item.id).join(","));
}

华为机试 - 统计射击比赛成绩相关推荐

  1. 【算法题】统计射击比赛成绩

    统计射击比赛成绩 package collections;import java.io.BufferedReader; import java.io.IOException; import java. ...

  2. 【华为OD机试真题 Java】统计射击比赛成绩

    前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...

  3. 【华为OD机试真题 Python】统计射击比赛成绩

    前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...

  4. 【华为OD机试 2023 B卷 | 100分】 统计射击比赛成绩(C++ Java JavaScript )

    在线OJ 已购买本专栏用户,请私信博主开通账号,在线刷题!!! 运行出现 Runtime Error 0Aborted,请忽略 华为OD统一考试A卷+B卷 新题库说明 2023年5月份,华为官方已经将 ...

  5. 【华为机试真题Java】统计射击比赛成绩

    目录 题目描述 输入描述 输出描述 参考示例 参考代码 机试介绍 写在最后 题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排 ...

  6. 华为OD机试真题 Python 实现【统计射击比赛成绩】

    目录 题目 思路 考点 Code 题目 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列.条件如下: 1.一个选手可 ...

  7. 华为机试真题 Java 实现【统计射击比赛成绩】

    目录 题目 思路 考点 Code 题目 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列.条件如下: 1.一个选手可 ...

  8. 【华为机试真题 Python】统计射击比赛成绩

    目录 题目描述 输入描述 输出描述 参考示例 参考代码 机试介绍 写在最后

  9. 华为机试--统计字符

    描述: 输入一行字符,分别统计出包含英文字母.空格.数字和其它字符的个数. 数据范围:输入的字符串长度满足 1≤n≤1000 输入描述: 输入一行字符串,可以有空格 输出描述: 统计其中英文字符,空格 ...

  10. 华为机试(JAVA)真题Od【A卷+B卷】

    各语言题库: [Python+JS+Java合集][超值优惠]:Py/JS/Java合集 [Python]:Python真题题库 [JavaScript]:JavaScript真题题库 [Java]: ...

最新文章

  1. Nchain旗下矿池挖出首个BCH区块,“算力战争”真的要来了?
  2. 第五十九期:商用数据库之死:Oracle 面临困境
  3. 领略ES10的新功能
  4. [转载] 在java中,如何将方法作为参数传递
  5. java hashmap 无序_Map的有序和无序实现类,与Map的排序
  6. C语言中的位操作(3)--两整数中的最大值与最小值
  7. 【openGauss】gsql客户端工具(二)gsql客户端工具之Data Studio客户端工具
  8. 智能算法-模拟退火-粒子群-鱼群算法
  9. 微信支付服务器白名单,微信测试号白名单怎么回事?如何进行微信支付测试?
  10. Ollydbg 1.10's plugin LsMem2CAry.dll
  11. 实现内网穿透的两种方式
  12. 12306暴SQL注入漏洞?!这下乐大发了
  13. java实现excel导出功能
  14. 计算机设备驱动程序的安装与更新,电脑系统驱动如何安装更新?
  15. 传感器模组:手机摄像头模组-1亿像素是如何实现的?
  16. jq的三种选择qi_您已经选择了带有qi无线充电功能的无线耳机
  17. 【陈工笔记】# Latex中,%如何处理? #
  18. python中degree什么意思_Python代码中degrees()函数有什么功能呢?
  19. 法国总统马克龙、挪威首相索尔贝格将参加目标守卫者大会
  20. 超文本(Hypertext)

热门文章

  1. C/C++牛客网刷题练习之翻转链表篇
  2. xcode6 下载地址
  3. 关于error in opening zip file
  4. matlab 牛顿冷却定律,传热学MATLAB度分布大作业完整版.doc
  5. 丰田chr内外循环怎么区分_丰田C-HR怎么开启暖风
  6. dubbo 的SPI机制Adaptive适配
  7. Carlife Iphone IAP2连接与认证过程
  8. 关于MOSFET驱动电阻的选择
  9. Android5.1 快捷开关如何添加和刷新状态
  10. 条形码生成EAN-13码(用JavaScript生成)