【算法基础】循环相克令(猜拳游戏)

在这里插入图片描述

👦个人主页:Weraphael
✍🏻作者简介:目前正在学习c++和算法
✈️专栏:【C/C++】算法
🐋 希望大家多多支持,咱一起进步!😁
如果文章有啥瑕疵
希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍


目录

  • 一、题目描述
  • 二、朴树思路及代码实现
  • 三、优雅思想和代码实现

一、题目描述

在这里插入图片描述

二、朴树思路及代码实现

可能很多人一开始写就是嵌套if-else代码如下:(本人也一样)

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    int t;
    cin >> t;

    while (t--)
    {
        string a, b;
        cin >> a >> b;

        if (a == "Hunter")
        {
            if (b == "Hunter")
            {
                cout << "Tie" << endl;
            }
            else if (b == "Bear")
            {
                cout << "Player2" << endl;
            }
            else cout << "Player1" << endl;
        }
        else if (a == "Bear")
        {
            if (b == "Hunter")
            {
                cout << "Player1" << endl;
            }
            else if (b == "Bear")
            {
                cout << "Tie" << endl;
            }
            else cout << "Player2" << endl;
        }
        else // a == Gun
        {
            if (b == "Hunter")
            {
                cout << "Player2" << endl;
            }
            else if (b == "Bear")
            {
                cout << "Player1" << endl;
            }
            else cout << "Tie" << endl;
        }
    }
    return 0;
}

三、优雅思想和代码实现

后来听了y总的思路:我们可以将Player1Player2的所有可能性映射成数字,例如,Hunter记作0Gun记作1Bear记作2 。然后根据题目意思:猎人赢枪、枪赢狗熊、狗熊赢猎人,可以得出以下关系:

player1    player2
   0   ->    1
   1   ->    2
   2   ->    0
// -> 代表赢

然后我们可以发现一些规律:

  1. 如果player1 == player2代表平局Tie
  2. 如果(Player1 + 1) % 3 == Player2的话,就代表Player1
  3. 如果不包含以上两种情况,则Player2

于是可以写出以下【优雅代码】

#include <string>
#include <iostream>
using namespace std;

int main()
{
    int t;
    cin >> t;
    
    while (t --)
    {
        string a, b;
        cin >> a >> b;
        
        int x, y;
        if (a == "Hunter") x = 0;
        else if (a == "Gun") x = 1;
        else x = 2;
        
        if (b == "Hunter") y = 0;
        else if (b == "Gun") y = 1;
        else y = 2;
        
        if (x == y) puts("Tie");
        else if ((x + 1) % 3 == y) puts("Player1");
        else puts("Player2");
    }
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【转载】linux摄像头驱动

Linux摄像头驱动学习第一篇&#xff0c;对虚拟视频驱动Virtual Video Driver(vivid)进行测试、分析、编写。 V4L2(Video for Linux two)是Linux内核中关于视频设备的内核驱动框架&#xff0c;为上层的访问底层的视频设备提供了统一的接口。 V4L2可以支持多种设备,它可以有以下…

【C++】入门(二)

前言&#xff1a; c基础语法&#xff08;下&#xff09; 文章目录 五、引用5.1 引用概念5.2 引用使用规则5.3 常引用5.4 引用的使用场景5.5 引用和指针的区别 六、内联函数6.1 概念6.2 内联函数的特性 七、auto关键字&#xff08;C11&#xff09;7.1 概念7.2 使用规则7.3 用于f…

自然语言处理--基于HMM+维特比算法的词性标注

自然语言处理作业2--基于HMM维特比算法的词性标注 一、理论描述 词性标注是一种自然语言处理技术&#xff0c;用于识别文本中每个词的词性&#xff0c;例如名词、动词、形容词等&#xff1b; 词性标注也被称为语法标注或词类消疑&#xff0c;是语料库语言学中将语料库内单词…

【Java-框架-SpringSecurity】单点登录(认证和授权)- 随笔

项目文件&#xff1b; 【1】 预览 文件 文件01 名称 pom.xml&#xff1b; 内容 &#xff08;01&#xff09;总的 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http:…

RFID标签是什么?该技术有哪些应用领域?

射频识别&#xff08;RFID&#xff09;技术利用电磁场&#xff0c;自动识别和跟踪附在物体上的标签&#xff0c;其中&#xff0c;近场通信&#xff08;NFC&#xff09;是一种基于短距离RFID高频技术的标准&#xff0c;支持13.56 MHz的频率。 NFC技术在现今的产品中应用广泛&am…

一文掌握全方位构建 ECS 安全体系的最佳方法

云布道师 2024 开年伊始&#xff0c;阿里云弹性计算团队全新推出新一季【ECS 安全季】&#xff0c;通过分享云上安全体系相关产品与最佳实践&#xff0c;让用户快速上手构建业务的安全防护能力。 首节课程《如何全方位构建 ECS 的安全体系》由阿里云弹性计算高级产品专家马小…

Python一些可能用的到的函数系列122 ATimer2

说明 由于时间处理在算网中起到了更重要的作用&#xff1a;不仅是进行时间计算&#xff0c;而是成为架构规范的一部分&#xff0c;因此需要对ATimer进行升级&#xff0c;成为一个基础依赖对象。 内容 1 设计 ATimer的作用更多的是进行即时计算&#xff0c;ATimer2将拓展为基…

关于软件0X00000007B的问题

对于0x0000007B问题相信大家一定都很头疼,编译好的软件在自己电脑上可以正常运行,更换一台电脑或许就无法正常运行.那么我们改怎么处理呢? 情况一:vs版本不一致导致的打不开软件 1方法一Windows日志查看软件运行失败的原因,一般都是dll版本不兼容引起的无法调用,解决方法 “”…

穿越网络边界:深入了解 FRP 内网穿透机制

前言 在当今互联网时代&#xff0c;内网穿透成为了解决内部网络服务对外难以访问的问题的一种重要方式。Fast Reverse Proxy&#xff08;FRP&#xff09;作为一款强大的反向代理工具&#xff0c;为用户提供了一种高效、灵活的内网穿透解决方案。本文将深入介绍 FRP 的原理和使…

java基础学习: 什么是泛型的类型擦除

文章目录 一、什么是泛型2、泛型编译前和编译后对比3、泛型的优点&#xff08;1&#xff09;提高了代码的复用性和可读性&#xff08;2&#xff09;提高了代码的安全性 二、泛型的定义1、泛型类2、泛型接口3、泛型方法 三、泛型通配符1、&#xff1f;和T有什么区别2、通配符的分…

喝汽水问题(c语言)

喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff0c;这里用c语言来解释 可以先用列举法来说明&#xff0c;20可以买20个汽水&#xff0c;两个空瓶换一瓶就可以获得10个汽水&#xff0c;同理10个空瓶个可…

IDEA常用插件(本人常用,不全)

文章目录 一、图标提示类插件1、Lombok插件&#xff08;用户配合lombok依赖的工具&#xff09;2、MybatisX插件3、GitToolBox4、VUE.js5、ESLint 二、代码自动生成插件1、EasyCode插件&#xff1a;自动生成代码神器2、GsonFormat 三、常用工具类1、IDE Eval Reset 插件&#xf…

vector函数介绍与实现(迭代器失效)

目录 一、介绍vector 1.vector是什么 2.vector的特点 1.随机访问 2.缓存命中 3.vector的结构 二、vector的函数 1.构造函数&#xff08;创建&#xff09;​编辑 2.Iterator&#xff08;迭代器&#xff09; 3.Capacity&#xff08;容量&#xff09; 三、迭代器失效 …

数据库性能优化的解决方案

目录​​​​​​​ 1、什么是数据库性能优化 1.1 数据库性能优化的概念 1.2 为何需要进行数据库性能优化 1.3 数据库性能优化的好处 2、数据库性能优化的基本原理 2.1 数据库查询优化 2.2 数据库索引优化 2.3 数据库表结构优化 2.4 数据库硬件优化 3、数据库查询优化…

一个好用的服务器控制面板

简介 它是一个免费开源的管理面板工具&#xff0c;可以帮助你集中管理多个服务器和网站。Ajenti 支持 Linux、BSD、Mac OS X和Windows 等多个操作系统&#xff0c;并且可以通过一个直观的 Web 界面来完成各种系统管理任务。 相比于其他管理面板&#xff0c;Ajenti有以下几个优…

go语言数组和切片

1. 数组Array Golang Array和以往认知的数组有很大不同。 1. 数组&#xff1a;是同一种数据类型的固定长度的序列。2. 数组定义&#xff1a;var a [len]int&#xff0c;比如&#xff1a;var a [5]int&#xff0c;数组长度必须是常量&#xff0c;且是类型的组成部分。一旦定义&…

数字主持人有多少种应用方式?

在数字经济时代下&#xff0c;越来越多企业、品牌以数字人进行新闻资讯报道、主持互动、人机交互等多形式&#xff0c;提升企业、品牌的影响力和认知度。 *图片源于网络 如山东广播电视台数字主持人“海蓝”&#xff0c;不仅可以用大会活动现场&#xff0c;用多国语言与主持人、…

从零开始c++精讲:第四篇——模板初阶

文章目录 一、泛型编程二、函数模板2.1函数模板概念2.2函数模板格式2.3函数模板原理2.4函数模板实例化2.5函数模板匹配原则 三、类模板3.1类模板的定义格式3.2类模板的实例化 一、泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& righ…

ios适配虚拟home键

在H5开发过程中遇到一个兼容性问题。iphone手机的虚拟home键会对屏幕底部的内容造成遮挡。要处理此问题&#xff0c;需要清楚安全区域这个概念。 安全区域 根据刘海和虚拟Home键&#xff0c;Apple为其设备提供了屏幕安全区域的视觉规范 竖屏&#xff1a;竖屏的时候&#xff…

基于springboot在线学习平台源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括学习平台的网络应用&#xff0c;在外国学习平台已经是很普遍的方式&#xff0c;不过国内的管理平台可能还处于起步阶段。学习平台具有学习信息管理功能的选择。学习平台采用ja…