华为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算法源码

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]; // 玩家ID
            char 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在线答疑。

相关推荐
小灰灰__2 分钟前
IDEA加载通义灵码插件及使用指南
java·ide·intellij-idea
夜雨翦春韭6 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
程序媛小果26 分钟前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
追风林31 分钟前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
芒果披萨1 小时前
El表达式和JSTL
java·el
duration~1 小时前
Maven随笔
java·maven
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
跃ZHD2 小时前
前后端分离,Jackson,Long精度丢失
java
blammmp2 小时前
Java:数据结构-枚举
java·开发语言·数据结构
暗黑起源喵2 小时前
设计模式-工厂设计模式
java·开发语言·设计模式