华为OD机试 - 统计射击比赛成绩 - 逻辑分析(Java 2023 B卷 100分)

news2025/7/11 9:31:51

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

条件如下:

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

二、输入描述

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

三、输出描述

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

四、解题思路

  1. 第一行输入选手人数;
  2. 第二行输入选手ID;
  3. 第三行输入选手所得分数;
  4. 定义listMap,key:选手ID,value:每个选手的分数列表;
  5. 定义map,key:选手ID,value:每个选手最高的3个分数之和;
    • 如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手;
    • 对每个选手的分数进行降序排序;
    • 计算每个选手最高的3个分数之和;
  6. 按照每个选手最高的3个分数之和降序排序,如果分数相等,按选手ID序列降序排序,否则先按分数降序排序;
  7. 输出降序排名后的选手ID序列。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = Integer.valueOf(sc.nextLine());
    // 选手
    int[] playerArr = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
    // 分数
    int[] scoreArr = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();

    // key:选手ID,value:每个选手的分数列表
    Map<Integer, List<Integer>> listMap = new HashMap<>();
    for (int i = 0; i < n; i++) {
        int player = playerArr[i];
        int score = scoreArr[i];
        List<Integer> scoreList = listMap.getOrDefault(player, new ArrayList<>());
        scoreList.add(score);
        listMap.put(player, scoreList);
    }

    // key:选手ID,value:每个选手最高的3个分数之和
    Map<Integer, Integer> map = new HashMap<>();
    // 计算每个选手最高的3个分数之和
    for (Map.Entry<Integer, List<Integer>> entry : listMap.entrySet()) {
        List<Integer> scoreList = entry.getValue();
        // 如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手
        if (scoreList.size() < 3) {
            continue;
        }

        // 对每个选手的分数进行降序排序
        Collections.sort(scoreList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });

        // 计算每个选手最高的3个分数之和
        int sum = 0;
        for (int i = 0; i < 3; i++) {
            sum += scoreList.get(i);
        }
        map.put(entry.getKey(), sum);
    }

    // 按照每个选手最高的3个分数之和降序排序,如果分数相等,按选手ID序列降序排序,否则先按分数降序排序
    List<Map.Entry<Integer, Integer>> mapList = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
    Collections.sort(mapList, new Comparator<Map.Entry<Integer, Integer>>() {
        public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
            if (o1.getValue().equals(o2.getValue())) {
                return o2.getKey().compareTo(o1.getKey());
            } else {
                return o2.getValue().compareTo(o1.getValue());
            }
        }
    });

    // 输出降序排名后的选手ID序列
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < mapList.size(); i++) {
        builder.append(mapList.get(i).getKey()).append(",");
    }
    System.out.println(builder.deleteCharAt(builder.length() - 1));
}

六、效果展示

1、输入

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

2、输出

5,3,7,4

3、说明

(1)统计每名选手分数

  • 3号:53,80,55
  • 7号:68,16,100
  • 4号:24,39,76,66
  • 5号:53,80,55

(2)计算每个选手最高的3个分数之和

  • 3号:53,80,55 – 188
  • 7号:68,16,100 – 184
  • 4号:24,39,76,66 – 181
  • 5号:53,80,55 – 188

(3)如果分数相等,按选手ID序列降序排序,否则先按分数降序排序

5号 – 188
3号 – 188
7号 – 184
4号 – 181

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

【金银钻思】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ScrapeKit库中Swift爬虫程序写一段代码

以下是一个使用ScrapeKit库的Swift爬虫程序&#xff0c;用于爬取网页视频的代码&#xff1a; import ScrapeKit// 创建一个配置对象&#xff0c;用于指定爬虫ip服务器信息 let config Configuration(proxyHost: "duoip", proxyPort: 8000)// 创建一个爬虫对象 let s…

Linux新加硬盘的挂载方法

1、首先查看当前硬盘所属的分区 sudo fdisk -lu 可以看到我们新加的盘&#xff1a; 接下来&#xff0c;对这个盘进行格式化&#xff1a; sudo mkfs -t ext4 /dev/sda 特别提醒&#xff1a; 这里的 /dev/sda 是你新挂载的盘符&#xff0c;一定不能搞错&#xff0c;不然就可能造…

Vue3.0 reactive与ref VCA模式

简介 Vue3 最大的一个变动应该就是推出了 CompositionAPI&#xff0c;可以说它受ReactHook 启发而来&#xff1b;它我们编写逻辑更灵活&#xff0c;便于提取公共逻辑&#xff0c;代码的复用率得到了提高&#xff0c;也不用再使用 mixin 担心命名冲突的问题。 ref 与 reactive…

高尔夫代码

在高尔夫游戏中&#xff0c;每个洞都有自己的标准杆数par&#xff0c;意思是一个高尔夫球员为了把球打进洞里完成比赛&#xff0c;预计要挥杆的平均次数 strokes。 根据你把球打进洞所挥杆的次数 strokes 高于或低于 par 多少&#xff0c;有一个不同的昵称&#xff08;代表打高…

已经安装了pandas库,但仍然遇到导入错误

已经安装了pandas库&#xff0c;但仍然遇到导入错误&#xff0c;可能是因为你的开发环境没有正确配置或没有选中正确的Python解释器。 报错内容&#xff1a; [{"resource": "/D:/Desktop/01.py","owner": "_generated_diagnostic_collect…

Find My移动硬盘|苹果Find My技术与移动硬盘结合,智能防丢,全球定位

当今已经是数据的时代&#xff0c;各种东西需要保存下来的很多&#xff0c;电脑、手机等设备更换频率也快&#xff0c;确实每个人都需要一个自己的"数据库"&#xff0c;而移动硬盘无疑是最有性价比、最简单使用的选择。移动硬盘一直是我们生活中不可或缺的存储工具&a…

2023最新ChatGPT商业运营系统源码+支持GPT4/支持ai绘画+支持Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

鼠标移动的提示框

<template><div><!-- 提示框 --><div class"float-tip" :show"floatTipData.show" :style"floatTipData.style">{{ floatTipData.text }}</div><!-- 移入某个元素触发显示跟随提示框显示--><div class&q…

206.反转链表

206.反转链表 力扣题目链接(opens new window) 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 双双指针法&#xff1a; 创建三个节点 pre(反转时的第一个节点)、cur(当前指向需要反转的节点…

云原生环境下JAVA应用容器JVM内存如何配置?—— 筑梦之路

Docker环境下的JVM参数非定值配置 —— 筑梦之路_docker jvm设置-CSDN博客 之前简单地记录过一篇&#xff0c;这里在之前的基础上更加细化一下。 场景说明 使用Java开发且设置的JVM堆空间过小时&#xff0c;程序会出现系统内存不足OOM&#xff08;Out of Memory&#xff09;的…

『第十二章』数据持久化:SwiftData

在本篇博文中,您将学到如下内容: 1. 全新的 SwiftData2. SwiftData 的组成SwiftData 数据模型3. SwiftData 数据模型与增删改查操作4. 双剑合璧:SwiftData 与 SwiftUI总结梦后楼台高锁,酒醒帘幕低垂。 去年春恨却来时。 落花人独立,微雨燕双飞。 记得小蘋初见,两重心字罗衣…

MacBook终端安装tree命令(保证好使)

1. 首先在终端安装brew 由于mac是没有原生支持tree命令的&#xff0c;所以我们在安装tree命令之前&#xff0c;先安装brew。 先输入下面命令&#xff0c;安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)…

针对实体商家技术开发一体化营销工具都包含那些功能呢?

1.批量剪辑技术研发 做的数学建模算法&#xff0c;数学阶乘的组合乘组形式&#xff0c;采用两套查重机制&#xff0c;一套针对素材进行查重抽帧素材&#xff0c;一套针对成片进行抽帧素材打分制度查重&#xff0c;自动滤重计入打分。 2.账号矩阵分发开发 多平台&#xff0c;…

我不允许你还不知道公众号菜单栏添加表情的两种方法

在做公众号的环节中&#xff0c;设置菜单栏也很重要&#xff0c;菜单栏可以增加交互性和用户体验的趣味性。表情符号可以使得公众号菜单栏更加生动有趣&#xff0c;吸引用户的注意力&#xff0c;提高用户的使用体验&#xff1b;提高用户辨识度&#xff0c;通过使用表情符号&…

vue 获取上一周和获取下一周的日期时间

效果图&#xff1a; 代码 <template><div><div style"padding: 20px 0;"><div style"margin-left: 10px; border-left: 5px solid #0079fe; font-size: 22px; font-weight: 600; padding-left: 10px">工作计划</div><di…

怎么开发小程序?微信小程序开发方式

小程序开发之所以受到欢迎&#xff0c;是因为相比于APP&#xff0c;小程序的开发成本更低。不需要下载和安装&#xff0c;用户可以直接在微信内使用&#xff0c;节省了开发和维护的成本。小程序的开发方式有很多种&#xff0c;常见的有&#xff1a;自己源码开发、模板编辑、购买…

纷享销客BI,助力企业激活数据价值,科学企业决策

10月25日上午&#xff0c;国家数据局正式挂牌成立&#xff0c;这标志着我国数字经济发展将进入新的发展阶段&#xff0c;也将有力促进数据要素技术创新、开发利用和有效治理&#xff0c;以数据强国支撑数字中国的建设。伴随数据作为企业新的生产要素的意义不断凸显&#xff0c;…

C++继承——矩形和长方体

Rectangle矩形类 /*矩形类*/ class Rectangle { private:double L 0;double W 0; public:Rectangle() default;Rectangle(double a, double b);double GetArea(); /*矩形面积*/double GetGirth(); /*矩形周长*/ }; /*构造函数*/ Rectangle::Rectangle(double a, double b) …

单篇笔记预估曝光360万+!小红书数据分析,内容社交新模式新解法

今年搭子火了&#xff0c;从中我们发掘现代人的社交新模式。其实&#xff0c;在小红书上&#xff0c;还藏着另一种社交模式——“互换生活”。不管是大热的旅游赛道&#xff0c;还是美妆、穿搭、美食等&#xff0c;都频出爆文。 一、小红书用户的社交新模式&#xff1a;互换生活…