最新华为OD机试真题-石头剪刀布游戏(100分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新 华为OD机试-D卷 的三语言AC题解

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

=> LYA与朋友们的石头剪刀布游戏(100分) <=

华为OD

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

🪐 LYA与朋友们的石头剪刀布游戏

问题描述

LYA 和朋友们在玩石头剪刀布游戏。游戏中有三种出拳形状:石头、剪刀、布,分别用字母 表示。

游戏规则如下:

  1. 出拳形状之间的胜负关系:
  2. 当一轮游戏中有且仅有一种出拳形状优于其他所有出拳形状时,使用该形状的玩家获胜。否则判定为平局。
  3. 平局时没有赢家。有多个玩家获胜时,他们同为赢家。

例如:

  • 三个玩家出拳分别为 ,由于出现循环优势,判断为平局。
  • 三个玩家出拳分别为 ,出拳 的玩家获胜。
  • 三个玩家出拳均为 ,判断为平局。

输入格式

每个玩家的信息占一行,包含两个字段,用空格隔开:

  1. 玩家 :仅由英文字母和数字组成的字符串。
  2. 出拳形状:英文大写字母 之一。

玩家数量不超过

输出格式

输出获胜玩家的 列表,每个 占一行,按字符串字典序排列。如果没有赢家,输出 NULL

样例输入

abc1 A
xyz B

样例输出

abc1

样例输入

abc1 A
xyz A

样例输出

NULL

样例输入

abc1 A
def A
alic A 
xyz B

样例输出

abc1
alic
def

数据范围

  • 玩家数量不超过
  • 玩家 长度不超过 ,仅由英文字母和数字组成。

题解

本题可以用哈希表来解决。具体思路如下:

  1. 用哈希表统计每种出拳形状对应的玩家列表。
  2. 根据哈希表的大小判断游戏结果:
    • 如果只有一种出拳形状,或者三种出拳形状都有玩家选择,则判定为平局,输出 NULL
    • 如果有两种出拳形状:
      • 如果没有 ,则 获胜;
      • 如果没有 ,则 获胜;
      • 如果没有 ,则 获胜。
    • 将获胜玩家列表按字符串字典序排序并输出。

时间复杂度 ,其中 为玩家数量。排序获胜玩家列表需要 的时间复杂度。

空间复杂度 。哈希表和获胜玩家列表的空间复杂度均为

参考代码

  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    unordered_map<char, vector<string>> ht;
    string id;
    char gesture;

    while (cin >> id >> gesture) {
        if (gesture < 'A' || gesture > 'C') {
            cout << "NULL" << endl;
            return 0;
        }
        ht[gesture].push_back(id);
    }

    switch (ht.size()) {
        case 1:
        case 3:
            cout << "NULL" << endl;
            break;
        case 2:
            vector<string> ans;
            if (!ht.count('A')) {
                ans = ht['B'];
      

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

最新华为OD机试-E+D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-E/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 部分题目提供OJ在线评测

全部评论
🌍 评测功能需要 订阅专栏 后联系清隆解锁~ #华为od#
点赞 回复 分享
发布于 07-02 19:08 浙江

相关推荐

09-29 17:44
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
舞台少女神顺光:🐟小c的一选也只有一个hc,飞哥值得
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务