华为OD机试 - 石头剪刀布游戏(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
石头剪刀布游戏有 3 种出拳形状:石头、剪刀、布。分别用字母 A , B , C 表示。
游戏规则:
- 出拳形状之间的胜负规则如下: A > B;B > C;C > A;">"左边一个字母,表示相对优势形状。右边一个字母,表示相对劣势形状。
- 当本场次中有且仅有一种出拳形状优于其它出拳形状,则该形状的玩家是胜利者。否则认为是平局。
- 当发生平局,没有赢家。有多个胜利者时,同为赢家。
例如 1: 三个玩家出拳分别是A, B, C ,由于出现三方优势循环(即没有任何一方优于其它出拳者),判断为平局。
例如 2: 三个玩家,出拳分别是 A, B ,出拳 A 的获胜。
例如 3: 三个玩家,出拳全部是 A ,判为平局。
二、输入描述
在一场游戏中,每个玩家的信息为一行。玩家数量不超过 1000 。每个玩家信息有 2 个字段,用空格隔开:
- 玩家 ID:一个仅由英文字母和数字组成的字符串
- 出拳形状:以英文大写字母表示, A 、B 、C 形状。
例如:
abc1 A
xyz B
解释:玩家 abc1 出拳为石头( A )。玩家 xyz 出拳为剪刀( B )
三、输出描述
输出为赢家的玩家 ID 列表(一个或多个),每个 ID 一行,按字符串升序排列。如果没有赢家,输出为"NULL"字符串。
例如:abc1
1、输入
abc1 A
xyz B
2、输出
abc1
3、说明
A 比 B 有优势,abc1 胜出
四、解题思路
要判断石头剪刀布游戏的赢家,首先需要理解游戏的规则。根据描述,玩家出拳有三种形状,分别用字母 A(石头)、B(剪刀)、C(布)表示。游戏规则是:
- A > B(石头胜剪刀)
- B > C(剪刀胜布)
- C > A(布胜石头)
如果某种形状相对于其他形状有唯一的胜利者,则该形状的玩家获胜;否则为平局。
解决步骤
- 读取输入:
- 读取每个玩家的信息,包括玩家ID和出拳形状。
- 统计出拳形状:
- 统计每种出拳形状的玩家数量及其玩家ID。
- 判断胜利者:
- 根据出拳形状数量判断是否存在唯一的胜者。
- 如果某种出拳形状有唯一的胜利者,记录其玩家ID;如果没有唯一的胜利者,则为平局。
- 输出结果:
- 如果存在赢家,按字符串升序输出玩家ID;如果没有赢家,输出 “NULL”。
五、Java算法源码
public class Test01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 存储玩家信息的列表,每个元素是一个包含玩家ID和出拳形状的数组List<String[]> players = new ArrayList<>();// 读取输入的每行数据,直到没有更多输入while (scanner.hasNextLine()) {String line = scanner.nextLine();if (line.isEmpty()) break; // 结束输入时跳出循环players.add(line.split(" ")); // 将玩家ID和出拳形状添加到列表}scanner.close(); // 关闭扫描器// 输出赢家的玩家ID列表,或者输出"NULL"System.out.println(findWinners(players));}public static String findWinners(List<String[]> players) {// 创建一个映射,用于存储每种出拳形状对应的玩家ID列表Map<Character, List<String>> shapeMap = new HashMap<>();shapeMap.put('A', new ArrayList<>());shapeMap.put('B', new ArrayList<>());shapeMap.put('C', new ArrayList<>());// 遍历所有玩家,统计每种出拳形状的玩家for (String[] player : players) {String playerId = player[0]; // 玩家IDchar shape = player[1].charAt(0); // 出拳形状shapeMap.get(shape).add(playerId); // 将玩家ID添加到对应出拳形状的列表中}List<String> winners = new ArrayList<>(); // 用于存储赢家的玩家ID// 判断哪种出拳形状获胜if (shapeMap.get('A').size() > 0 && shapeMap.get('B').size() > 0 && shapeMap.get('C').size() == 0) {winners.addAll(shapeMap.get('A')); // A > B,且没有C,则A获胜} else if (shapeMap.get('B').size() > 0 && shapeMap.get('C').size() > 0 && shapeMap.get('A').size() == 0) {winners.addAll(shapeMap.get('B')); // B > C,且没有A,则B获胜} else if (shapeMap.get('C').size() > 0 && shapeMap.get('A').size() > 0 && shapeMap.get('B').size() == 0) {winners.addAll(shapeMap.get('C')); // C > A,且没有B,则C获胜}// 如果没有赢家,返回"NULL"if (winners.isEmpty()) {return "NULL";}// 按字典顺序排序赢家的玩家ID,并返回结果Collections.sort(winners);StringBuilder result = new StringBuilder();for (String winner : winners) {result.append(winner).append("\n"); // 将每个赢家的ID添加到结果中,每个ID占一行}return result.toString().trim(); // 去掉末尾多余的换行符}
}
六、效果展示
1、输入
abc1 A
def A
alic A
xyz B
2、输出
abc1
alic
def
3、说明
A 为优胜方,有三个赢家。

🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关文章:
华为OD机试 - 石头剪刀布游戏(Java 2024 D卷 200分)
华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…...
[开发|java] LocalDate转化为LocalDateTime
要将 java.time.LocalDate 转换为 java.time.LocalDateTime,你需要指定一天中的时间。因为 LocalDate 只包含日期部分(年、月、日),而 LocalDateTime 包含日期和时间(时、分、秒、纳秒),所以在转…...
介绍几种 MySQL 官方高可用方案
前言: MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。 1.MySQL Replication MySQL Replication 是官方提供的主从同…...
IMU坐标系与自定义坐标系转化
1.首先示例图为例: 虚线黑色角度为IMU的坐标系;实线为自定义坐标系; 矫正:(默认angleyaw为IMU采的数据角度) angleyaw_pt angleyaw-25;if(-180<angleyaw&&angleyaw<-155) // 角度跳变问…...
《STM32 HAL库》RCC 相关系列函数详尽解析—— HAL_RCC_OscConfig()
观前提示:函数完整代码在文末,本文梳理了函数HAL_RCC_OscConfig()的主要逻辑和实现方法f105时钟树详解图 HAL_RCC_OscConfig() 函数介绍: 此函数是一个用于初始化RCC(Reset and Clock Control)振荡器(Osc…...
手动将jar包导入本地Maven仓库
1、进入存放jar包的目录,可以先放进仓库底下 2、cmd回车 3、执行命令,看到BUILD SUCCESS就是成功了 -DgroupId、-DartifactId、-Dversion、-Dfile记得换成自己对应的 mvn install:install-file -DgroupIdcom.github.03 -DartifactIdonvif -Dversion1.0…...
煤安防爆手机为什么能在煤矿井下使用
煤安防爆手机之所以能在煤矿井下使用,是因为它们经过特殊设计,符合严格的防爆安全标准,能够防止电火花引发爆炸,同时具备防尘防水、抗冲击等特性,确保在恶劣的煤矿环境中稳定可靠地运行,为工作人员提供安全…...
科普小课堂|不同版本USB接口详细解析
USB接口凭借其广泛的兼容性和高性能,已成为连接多样外设的主要接口,囊括了日常的键盘、鼠标等输入设备以及其他更多的领域。不仅如此,USB还展现了高度灵活性,能够便捷地转换为其他总线接口,例如实现USB到以太网或USB到…...
Spring Boot中的JSON解析优化
Spring Boot中的JSON解析优化 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用中如何优化JSON解析,以提升系统的性能…...
全彩屏负氧离子监测站
TH-FZ5在追求绿色生态、健康出行的今天,景区不仅仅是人们休闲游玩的好去处,更是人们体验大自然、感受清新空气的重要场所。为了进一步提升游客的游览体验,许多景区纷纷引入了全彩屏负氧离子监测站,这一创新举措不仅为景区增添了科…...
LeetCode 1207.独一无二的数
题目要求 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr [1,2,2,1,1,3] 输出:true 解释:在该…...
自然语言处理——英文文本预处理
高质量数据的重要性 数据的质量直接影响模型的性能和准确性。高质量的数据可以显著提升模型的学习效果,帮助模型更准确地识别模式、进行预测和决策。具体原因包括以下几点: 噪音减少:高质量的数据经过清理,减少了无关或错误信息…...
2024年二级建造师机电工程专业历年考试题库精选答案解析。
1.根据《标准施工招标文件》,关于施工合同变更权和变更程序的说法,正确的是()。 A.发包人可以直接向承包人发出变更意向书 B.承包人书面报告发包人后,可根据实际情况对工程进行变更 C.承包人根据合同约定࿰…...
Oracle 19C19.3 rac安装并RU升级到19.14
19C支持RU补丁安装。 下载好19.14的RU补丁 [rootrac1 soft]# ll total 9830404 -rw-r--r-- 1 grid oinstall 3059705302 Jun 18 15:26 LINUX.X64_193000_db_home.zip -rw-r--r-- 1 grid oinstall 2889184573 Jun 18 15:27 LINUX.X64_193000_grid_home.zip -rw-r--r-- 1 grid …...
1012:Joseph
网址如下: OpenJudge - 1012:Joseph 其中一个解法 只想到了一个快速找到下一位处决的人的方法,本质上还是遍历,暂时没想到更优的方法了 代码如下: #include<cstdio> int k;bool judge(int tt, int m, int r){if(tt k) …...
【高级篇】备份与恢复:守护数据的长城(十一)
引言 在上一章《性能优化》中,我们深入探讨了如何通过调整查询、优化索引和配置服务器参数等手段,提升MySQL的运行效率。然而,再高效的数据处理能力也无法抵御硬件故障、软件错误或人为失误带来的数据损失。因此,建立健全的备份与恢复机制是确保数据安全和业务连续性的关键…...
Docker构建多平台镜像
docker的多架构镜像构建 目前很多服务器都是基于arm架构的,而现在大多数的docker镜像都是基于x86架构的。一种情况就是同样的代码编译成业务包做成镜像需要部署在不同架构的服务器上,这个时候我们就可以使用docker的多平台构建了。 以下操作是在centos7.…...
群体优化算法---石墨烯优化算法介绍以及在期权定价上的应用(Black-Scholes模型来计算欧式期权的理论价格)
介绍 石墨烯算法是一种新兴的优化算法,灵感来自于石墨烯的结构和特性。石墨烯是一种由碳原子构成的二维蜂窝状晶格结构,具有优异的机械、电学和热学性能。石墨烯算法通过模拟石墨烯原子之间的相互作用和迁移,来求解复杂的优化问题 基本概念…...
创纪录!沃飞长空完成新一轮融资,实力获资方认可
作为全球竞逐的战略性新兴产业,今年首次写入政府工作报告的“低空经济”热度正持续提升,在政策、产业等多个层面均有重大突破。行业的飞速发展也吸引了投资界的目光,越来越多资本正投向低空经济。 近期,国内领先的低空出行企业吉…...
1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc
一、源码特点 JSP体检预约管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用…...
Windows ❀ 高效端口检测工具tcping的安装与实战技巧
1. 为什么你需要tcping这个神器? 做运维的朋友应该都遇到过这种情况:服务器明明能ping通,但服务就是访问不了。这时候传统的ping命令就束手无策了,因为它只能检测网络层是否连通,而无法判断具体端口是否开放。这就是tc…...
打破数据标注瓶颈:Label Studio如何让AI训练效率提升300%?
打破数据标注瓶颈:Label Studio如何让AI训练效率提升300%? 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/la/labe…...
VirtualBox虚拟机磁盘空间分配技巧:如何用动态分配40G空间玩转Debian 12
VirtualBox磁盘空间动态分配实战:以Debian 12为例的40GB高效配置指南 在虚拟化技术日益普及的今天,VirtualBox作为一款开源免费的虚拟化工具,凭借其跨平台特性和易用性,成为众多开发者和技术爱好者的首选。然而,许多用…...
计算机毕设 java 基于 Android 的医疗预约系统的设计与实现 SpringBoot 安卓智能医疗预约挂号平台 JavaAndroid 医患预约诊疗管理系统
计算机毕设 java 基于 Android 的医疗预约系统的设计与实现 53m069,末尾的数字和英文也要加上 (配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享随着信息技术的飞速发展和医疗需求的…...
探索Unity全功能的开源方案:UniHacker跨平台功能扩展工具深度指南
探索Unity全功能的开源方案:UniHacker跨平台功能扩展工具深度指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker Unity作为游戏开发领域的行业标…...
Spring Boot 与 Serverless 集成最佳实践
Spring Boot 与 Serverless 集成最佳实践 引言 大家好,今天想和大家聊聊 Spring Boot 与 Serverless 的集成。Serverless 是一种云原生的计算模型,它允许开发者专注于代码开发,而不需要管理服务器基础设施。在 Spring Boot 应用中,…...
three-tile: 一个为Three.js应用注入真实地形的开源LOD模型库
1. three-tile究竟是什么? 第一次看到three-tile这个名字,很多人会误以为它又是一个WebGIS框架。但实际使用后你会发现,这个开源库的定位非常独特——它本质上是一个专为Three.js设计的LOD地形模型库。所谓LOD(Level of Detail&am…...
【Hot 100 刷题计划】 LeetCode 138. 随机链表的复制 | C++ 链表深拷贝题解
LeetCode 138. 随机链表的复制 | C 哈希表 DFS 深拷贝题解 📌 题目描述 题目级别:中等 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 请你构造这个链表的深拷…...
Comsol光学仿真连续域束缚态BIC,te,tm模式耦合,透射光谱远场偏振矢量(导出数据计算)
Comsol光学仿真连续域束缚态BIC,te,tm模式耦合,透射光谱远场偏振矢量(导出数据计算),所见即所得 【手指在键盘上停顿三秒】这周在实验室搞COMSOL光学仿真差点被边界条件逼疯,连续域束缚态(BIC)…...
BiliTools跨平台哔哩哔哩工具箱:一站式B站资源管理终极解决方案
BiliTools跨平台哔哩哔哩工具箱:一站式B站资源管理终极解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/b…...
