当前位置: 首页 > news >正文

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

在这里插入图片描述

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

专栏导读

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

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

一、题目描述

石头剪刀布游戏有 3 种出拳形状:石头、剪刀、布。分别用字母 A , B , C 表示。

游戏规则:

  1. 出拳形状之间的胜负规则如下: A > B;B > C;C > A;">"左边一个字母,表示相对优势形状。右边一个字母,表示相对劣势形状。
  2. 当本场次中有且仅有一种出拳形状优于其它出拳形状,则该形状的玩家是胜利者。否则认为是平局。
  3. 当发生平局,没有赢家。有多个胜利者时,同为赢家。

例如 1: 三个玩家出拳分别是A, B, C ,由于出现三方优势循环(即没有任何一方优于其它出拳者),判断为平局。

例如 2: 三个玩家,出拳分别是 A, B ,出拳 A 的获胜。

例如 3: 三个玩家,出拳全部是 A ,判为平局。

二、输入描述

在一场游戏中,每个玩家的信息为一行。玩家数量不超过 1000 。每个玩家信息有 2 个字段,用空格隔开:

  1. 玩家 ID:一个仅由英文字母和数字组成的字符串
  2. 出拳形状:以英文大写字母表示, 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(布胜石头)

如果某种形状相对于其他形状有唯一的胜利者,则该形状的玩家获胜;否则为平局。

解决步骤

  1. 读取输入:
    • 读取每个玩家的信息,包括玩家ID和出拳形状。
  2. 统计出拳形状:
    • 统计每种出拳形状的玩家数量及其玩家ID。
  3. 判断胜利者:
    • 根据出拳形状数量判断是否存在唯一的胜者。
    • 如果某种出拳形状有唯一的胜利者,记录其玩家ID;如果没有唯一的胜利者,则为平局。
  4. 输出结果:
    • 如果存在赢家,按字符串升序输出玩家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在线答疑。

在这里插入图片描述

http://www.lryc.cn/news/384688.html

相关文章:

  • [开发|java] LocalDate转化为LocalDateTime
  • 介绍几种 MySQL 官方高可用方案
  • IMU坐标系与自定义坐标系转化
  • 《STM32 HAL库》RCC 相关系列函数详尽解析—— HAL_RCC_OscConfig()
  • 手动将jar包导入本地Maven仓库
  • 煤安防爆手机为什么能在煤矿井下使用
  • 科普小课堂|不同版本USB接口详细解析
  • Spring Boot中的JSON解析优化
  • 全彩屏负氧离子监测站
  • LeetCode 1207.独一无二的数
  • 自然语言处理——英文文本预处理
  • 2024年二级建造师机电工程专业历年考试题库精选答案解析。
  • Oracle 19C19.3 rac安装并RU升级到19.14
  • 1012:Joseph
  • 【高级篇】备份与恢复:守护数据的长城(十一)
  • Docker构建多平台镜像
  • 群体优化算法---石墨烯优化算法介绍以及在期权定价上的应用(Black-Scholes模型来计算欧式期权的理论价格)
  • 创纪录!沃飞长空完成新一轮融资,实力获资方认可
  • 1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc
  • 如何优雅终止线程/线程池
  • 泰迪智能科技实验室产品-云计算资源管理平台介绍
  • .Net WebApi启动 Swagger异常报错: Failed to load API definition
  • CSS新手入门笔记【导入方法、选择器介绍、选择器优先级、属性详细介绍、盒子模型】
  • 制作高校专属PPT时,如何将校徽设置成透明底色?无须PS
  • 设计模式之【适配器模式】
  • AI论文降重:一键操作,让你的论文查重率瞬间下降
  • Cmake--学习笔记
  • LangChain让LLM带上记忆
  • Word恢复历史文档,记好4个方法就足够
  • 收银系统源码-千呼新零售2.0【线上营销】