石头剪刀布游戏 - 华为OD统一考试

OD统一考试

分值: 100分

题解: Java / Python / C++

alt

题目描述

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

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

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

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

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

输入描述

在一场游戏中,每个玩家的信息为一行。玩家数量不超过 1000。

每个玩家信息有 2 个字段,用空格隔开:

  1. 玩家 ID:一个仅由 英文字母Q和数字组成的字符串。
  2. 出拳形状: 以英文大写字母表示,A、B、C 形状。

输出描述

输出为赢家的玩家 ID 列表(一个或多个),每个 ID 一行,按字符串升序排列。

如果没有赢家,输出为“NULL"字符串。

示例1

输入:
abc1 A
xyz B输出:
abc1说明:
A比B有优势,abc1 胜出。

示例2

输入:
abc1 A
xyz A输出:
NULL说明:
没有优胜的出拳形状,平局。

示例3

输入:
abc1 A
def A
alic A
xyz B输出:
abc1
alic
def说明:
A为优胜方,有三个赢家。

题解

解题思路

题目要求找出赢家的玩家 ID 列表,或者输出 “NULL”。首先,我们需要将玩家的信息按照出拳形状分组,即分成A、B、C三组。然后,判断每一组中是否有且仅有一种出拳形状优于其它出拳形状,如果是,则该组中的玩家是胜利者。最后,将胜利者的玩家 ID 按照字符串升序排列输出。

代码描述

  1. 使用三个列表A、B、C分别表示出拳形状为A、B、C的玩家。
  2. 遍历输入,根据出拳形状将玩家信息分组。
  3. 判断每一组中是否有且仅有一种出拳形状优于其它出拳形状,如果是,则该组中的玩家是胜利者。
  4. 将胜利者的玩家 ID 按照字符串升序排列输出;如果没有胜利者,输出"NULL"。

复杂度分析

时间复杂度:假设有n个玩家,遍历输入的时间复杂度为O(n)。

空间复杂度:使用了三个列表A、B、C来存储玩家信息,空间复杂度为O(n)。

Java

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);List<String> A = new ArrayList<>();List<String> B = new ArrayList<>();List<String> C = new ArrayList<>();while (scanner.hasNext()) {String user_id = scanner.next();String shape = scanner.next();if (shape.equals("A")) {A.add(user_id);} else if (shape.equals("B")) {B.add(user_id);} else {C.add(user_id);}}if (C.isEmpty() && !A.isEmpty() && !B.isEmpty()) {printResult(A);} else if (A.isEmpty() && !B.isEmpty() && !C.isEmpty()) {printResult(B);} else if (B.isEmpty() && !A.isEmpty() && !C.isEmpty()) {printResult(C);} else {System.out.println("NULL");}}private static void printResult(List<String> users) {Collections.sort(users);for (String user : users) {System.out.println(user);}}}

IDEA 控制台结束输入使用 Ctrl + D

Python

import sysA, B, C = [], [], []
for line in sys.stdin:user_id, shape = line.split()if shape == 'A':A.append(user_id)elif shape == 'B':B.append(user_id)else:C.append(user_id)def print_result(users):users.sort()print(*users, sep="\n", end="")if A and B and not C:   # 出 A 的人赢print_result(A)
elif B and C and not A:print_result(B)
elif C and A and not B:print_result(C)
else:print("NULL")

VS Code 控制台结束输入使用 Ctrl + Z

C++

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main() {vector<string> A, B, C;string user_id, shape;while (cin >> user_id >> shape) {if (shape == "A") {A.push_back(user_id);} else if (shape == "B") {B.push_back(user_id);} else {C.push_back(user_id);}}auto printResult = [](const vector<string>& users) {vector<string> sortedUsers = users;sort(sortedUsers.begin(), sortedUsers.end());for (const auto& user : sortedUsers) {cout << user << endl;}};if (A.empty() && !B.empty() && !C.empty()) {printResult(B);} else if (B.empty() && !A.empty() &&  !C.empty()) {printResult(C);} else if (C.empty() && !A.empty() && !B.empty()) {printResult(A);} else {cout << "NULL" << endl;}return 0;
}

CodeBlocks 控制台结束输入使用 Ctrl + C

相关练习题

题号题目难易
LeetCode 13661366. 通过投票对团队排名中等
LeetCode 937937. 重新排列日志文件中等

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04.MySQL的基本操作

MySQL的基本操作 一、连接和断开MySQL服务器1、通过系统服务器启动、停止MySQL服务器2、通过命令提示符&#xff08;DOS&#xff09;启动、停止MySQL服务器2.1 启动 MySQL 服务器&#xff1a;2.2 停止 MySQL 服务器&#xff1a;2.3 登录和退出mysql 二、创建和管理数据库2.1 创…

东信免驱系列身份证阅读器串口通讯协议解析示例,适用于单片机、ARM等系统开发集成使用

完整的一次读卡流程包括&#xff1a; 身份证寻卡 > 身份证选卡 > 身份证读卡&#xff0c;三个步骤 缺一不可&#xff08;见通讯协议&#xff09;。 寻卡&#xff1a;EA EB EC ED 04 00 B0 B4 BB 返回&#xff1a;EA EB EC ED 05 00 00 B0 B5 BB 选卡&#xff1a;EA …

【SpringBoot3】1.SpringBoot入门的第一个完整小项目(新手保姆版+教会打包)

目录 1 SpringBoot简单介绍1.1 SpringBoot是什么1.2 主要优点1.3 术语1.3.1 starter&#xff08;场景启动器&#xff09; 1.4 官方文档 2 环境说明3 实现代码3.1 新建工程与模块3.2 加入依赖3.3 主程序文件3.4 业务代码3.5 运行测试3.6 部署打包3.7 命令行运行 1 SpringBoot简单…

【Jasypt】SpringBoot配置文件加密

1、加密介绍 在yml配置文件中会存在一些敏感数据&#xff0c;比如用户名&#xff0c;密码&#xff0c;第三方应用的密钥等等。这些信息是以明文的形式出现在文件中&#xff0c;存在较大安全隐患。Jasypt&#xff08;Java Simplified Encryption&#xff09;是一个Java库&#…

小红书、抖音、视频号下载工具:随心管理个人作品集 | 开源日报 No.134

karanpratapsingh/system-design Stars: 20.6k License: NOASSERTION 这个项目是关于系统设计的。它提供了有关系统设计的课程内容&#xff0c;包括 IP、OSI 模型、TCP 和 UDP 等主题。该项目的核心优势和特点如下&#xff1a; 提供全面而高效的系统架构定义。从基础设施到数…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-6-元素定位大法-下篇

1.简介 上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的定位方法的理论基础知识以及在什么情况下推荐使用。今天这一篇讲解和分享一下&#xff0c;在日常中很少用到或者很少见的定位&#xff0c;但是遇到了我们也要会&#xff0c;俗话说&#xf…

RKE安装k8s及部署高可用rancher之证书在外面的7层LB(nginx中) 7层负载均衡

一 了解 Rancher 1 推荐架构 安装 Rancher 的方式有两种&#xff1a;单节点安装和高可用集群安装。因为单节点安装只适用于测试和 demo 环境&#xff0c;而且单节点安装和高可用集群安装之间不能进行数据迁移&#xff0c;所以推荐从一开始就使用高可用集群安装的方式安装 Ran…

视频融合云平台/智慧监控平台EassyCVR告警警告出错是什么原因?该如何解决?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能/大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼…

【webstorm中通过附加方式打开一个项目,这个项目本身有git,但是却看不到git的解决方法】

1、如图所示 设置-》版本控制-》未注册的根&#xff0c;选中后&#xff0c;再点加号&#xff0c;就可以了 2、如图所示 版本控制-》直接点加号-》选中项目路径&#xff0c;vcs选择git&#xff0c;点击确定就可以了

【QT搭建】搭建可以生成手机APP的环境

一.问题分析 1.在原来的QT版本上安装Android(不推荐) 此方法暂时未实践成功,记录调试过程,可跳过 如果原来安装过QT桌面级PC软件的,可能没有配置JDK和SDK就会在QT选项的设备栏目种看到报错的提示。 并且Kits的选项里面没有Android,所以解决的问题是,缺少Kit套件Andro…

【算法设计与分析】期末复习

文章目录 复习大纲第一章算法概述1.1算法与程序1.2 算法复杂性分析 第二章递归与分治策略分治法的基本思想递归与分治的关系&#xff1a;用分治法解决的问题的几个特征&#xff1a;例题&#xff1a; 第三章动态规划动态规划的基本思想&#xff1a;分治与动态规划算法的异同&…

unity C# 中通俗易懂LINQ使用案例

文章目录 1. 从数组或列表中查询元素**&#xff1a;2. **排序与分组**&#xff1a;3. **连接多个数据源**&#xff1a;4. **聚合操作**&#xff1a;5. **分页查询**&#xff1a;6. **多条件查询**&#xff1a;7. **转换和投影&#xff08;Select&#xff09;**&#xff1a;8. *…

javascript 常见工具函数(四)

31.RGB值和十六进制值之间的转换&#xff1a; &#xff08;1&#xff09;十六进制的颜色转为 RGB格式&#xff1a; /*16进制颜色转为RGB格式*/String.prototype.colorRgb function () {var sColor this.toLowerCase();if (sColor && reg.test(sColor)) {if (sColor.l…

车载 Android之 核心服务 - CarPropertyService 解析

重要类的源码文件名及位置&#xff1a; CarPropertyManager.java packages/services/Car/car-lib/src/android/car/hardware/property/ CarPropertyService.java packages/services/Car/service/src/com/android/car/ 类的介绍&#xff1a; CarPropertyManager&#xff1a…

【BERT】深入BERT模型2——模型中的重点内容,两个任务

前言 BERT出自论文&#xff1a;《BERT&#xff1a;Pre-training of Deep Bidirectional Transformers for Language Understanding》 2019年 近年来&#xff0c;在自然语言处理领域&#xff0c;BERT模型受到了极为广泛的关注&#xff0c;很多模型中都用到了BERT-base或者是BE…

计算机网络实验(六):三层交换机实现VLAN间路由

一、实验名称:三层交换机实现VLAN间路由 二、实验原理 2.1. VLAN基本配置 在交换网络中,为了实现对物理网络的逻辑划分,引入了VLAN(虚拟局域网)的概念。VLAN通过将不同的设备划分到不同的虚拟网络中,实现了逻辑隔离。基本配置包括在交换机上创建VLAN、将端口划分到相应…

深度学习MLP_实战演练使用感知机用于感情识别_keras

目录 &#xff08;1&#xff09;why deep learning is game changing?&#xff08;2&#xff09;it all started with a neuron&#xff08;3&#xff09;Perceptron&#xff08;4&#xff09;Perceptron for Binary Classification&#xff08;5&#xff09;put it all toget…

初识Linux下进程

&#x1f30e;初识进程 初识进程 简单认识一下进程 如何管理进程 进程属性信息 内核运行队列 查看进程 通过系统调用获取进程标识符       父子进程       查看运行中的进程 总结 前言&#xff1a; 我们在电脑上点开的一个个应用&#xff0c;其实就是一个个进程&am…

CMake支持的编译平台和IDE

文章目录 简介支持的IDEVisual Studio支持示例 其他编译器和生成器支持MinGW示例 IDE集成Eclipse示例 实验性和特殊平台支持总结 简介 CMake是一个非常强大的跨平台自动化构建工具&#xff0c;它支持生成多种类型的项目文件&#xff0c;覆盖了广泛的开发环境和编译器。在这篇博…

【Java】SpringBoot整合xxl-job学习使用详解

文章目录 介绍作用如何使用下载项目中央仓库地址环境调度中心初始化“调度数据库”配置部署“调度中心”部署项目调度中心集群&#xff08;可选&#xff09;其他&#xff1a;Docker 镜像方式搭建调度中心配置部署“执行器项目” 执行器maven依赖执行器配置执行器组件配置执行器…