【题目链接】

ybt 1132:石头剪子布
OpenJudge NOI 1.7 04:石头剪子布

【题目考点】

1. 字符串处理

2. 判断字符串相同

  • s1,s2是字符数组,判断二者是否相同:strcmp(s1,s2)==0为真,二者相同,否则二者不同。
  • s1,s2是string类对象,判断二者是否相同:s1 == s2为真,二者相同,否则二者不同。

【解题思路】

先输入n,循环n次,每次输入两个字符串

  • 如果这两个字符串相同,输出Tie
  • 如果第一个字符串表示的出拳胜过第二个字符串表示的出拳,输出Player1
  • 如果第二个字符串表示的出拳胜过第一个字符串表示的出拳,输出Player2
    在两个字符串不同的前提下,如何比较两个字符串表示的出拳谁胜谁负,有不同的方法实现。

1. 使用三个判断语句:

  • 如果玩家1出剪刀

    • 如果玩家2出石头,玩家2赢
    • 如果玩家2出布,玩家1赢
      再写出“如果玩家1出石头”,“如果玩家1出布”的判断语句,即可完成判断

2. 使用逻辑表达式

  • 如果玩家1出剪刀且玩家2出布,或玩家1出石头且玩家2出剪刀,或玩家1出布且玩家2出石头,此时玩家1赢。
  • 否则,玩家2赢

3. 初始化二维数组来记录胜负规则,需要时查询二维数组。

【题解代码】

解法1:使用字符数组,三个判断语句

判断字符串相同使用strcmp函数,判断一个字符串是不是剪刀,就写为:strcmp(s1, "Scissors") == 0

#include <bits/stdc++.h>
using namespace std;
int main()
{char s1[10], s2[10];int n;cin>>n;for(int i = 0; i < n; ++i){cin>>s1>>s2;if(strcmp(s1, s2) == 0)cout<<"Tie"<<endl;else{if(strcmp(s1, "Rock") == 0){if(strcmp(s2, "Scissors") == 0)cout<<"Player1"<<endl;elsecout<<"Player2"<<endl;}if(strcmp(s1, "Scissors") == 0){if(strcmp(s2, "Paper") == 0)cout<<"Player1"<<endl;elsecout<<"Player2"<<endl;}if(strcmp(s1, "Paper") == 0){if(strcmp(s2, "Rock") == 0)cout<<"Player1"<<endl;elsecout<<"Player2"<<endl;}}}return 0;
}

解法2:使用string类,逻辑表达式

#include <bits/stdc++.h>
using namespace std;
int main()
{string s1, s2;int n;cin>>n;for(int i = 0; i < n; ++i){cin>>s1>>s2;if(s1 == s2)cout<<"Tie"<<endl;else{if(s1 == "Rock" && s2 == "Scissors" || s1 == "Scissors" && s2 == "Paper" || s1 == "Paper" && s2 == "Rock")cout<<"Player1"<<endl;elsecout<<"Player2"<<endl;}}return 0;
}

解法3:使用字符数组,逻辑表达式,只比较首字母

因为Rock, Paper, Scissors三个单词首字母不同,所以在做比较时,实际不需要比较单词,只比较首字母也可以达到目的。

#include <bits/stdc++.h>
using namespace std;
int main()
{char s1[10], s2[10];int n;cin>>n;for(int i = 0; i < n; ++i){cin>>s1>>s2;if(s1[0] == s2[0])cout<<"Tie"<<endl;else if (s1[0] == 'R' && s2[0] == 'S' || s1[0] == 'S' && s2[0] == 'P' || s1[0] == 'P' && s2[0] == 'R')cout<<"Player1"<<endl;elsecout<<"Player2"<<endl;}return 0;
}

解法4:用二维数组保存出拳的胜负关系

用1表示石头,2表示剪刀,3表示布
设整型二维数组w,w[i][j]表示玩家1出拳为i同时玩家2出拳为j时的结果,1表示玩家1胜,-1表示玩家1败,0表示平局。
将这一二维数组初始化后,进行查询。

#include <bits/stdc++.h>
using namespace std;
int w[4][4];//w[i][j]表示玩家1出拳为i同时玩家2出拳为j时的结果,1表示玩家1胜,-1表示玩家1败,0表示平局。
int toNum(char s[])//将字符数组s转化为数字,Rock为1,Scissors为2,Paper为3
{switch(s[0]){case 'R':return 1;case 'S':return 2;case 'P':return 3;}
}
void initW()
{w[1][1] = w[2][2] = w[3][3] = 0;w[1][2] = w[2][3] = w[3][1] = 1;w[2][1] = w[3][2] = w[1][3] = -1;
}
int main()
{initW();char s1[10], s2[10];int n, n1, n2;//n1,n2:玩家1,2出拳对应的数字 cin>>n;for(int i = 0; i < n; ++i){cin>>s1>>s2;n1 = toNum(s1);n2 = toNum(s2);if(w[n1][n2] == 0)cout<<"Tie"<<endl;else if(w[n1][n2] == 1)cout<<"Player1"<<endl;elsecout<<"Player2"<<endl;}return 0;
}

信息学奥赛一本通 1132:石头剪子布 | OpenJudge NOI 1.7 04相关推荐

  1. 信息学奥赛一本通 1242:网线主管 | OpenJudge NOI 1.11 04:网线主管

    [题目链接] ybt 1242:网线主管 OpenJudge NOI 1.11 04:网线主管 [题目考点] 1. 二分答案 [解题思路] 看题目中的数据都带小数点,似乎这是实数域上的问题.但仔细分析 ...

  2. 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和

    [题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 2. 求最小公倍数 [解题思路] 求最大公约数,可以用辗转相除法.具体 ...

  3. 信息学奥赛一本通 1294:Charm Bracelet | OpenJudge NOI 2.6 7113:Charm Bracelet | 洛谷 P2871

    [题目链接] ybt 1294:Charm Bracelet OpenJudge NOI 2.6 7113:Charm Bracelet 洛谷 P2871 [USACO07DEC]Charm Brac ...

  4. 信息学奥赛一本通 1173:阶乘和 | OpenJudge NOI 1.6 15 | 洛谷 P1009 [NOIP1998 普及组] 阶乘之和

    [题目链接] ybt 1173:阶乘和 注:一本通上这题,应该把n≤50n\le50n≤50当做n≤100n\le100n≤100来看 OpenJudge NOI 1.6 15:阶乘和 洛谷 P100 ...

  5. 信息学奥赛一本通 1232:Crossing River | OpenJudge NOI 4.6 702:Crossing River

    [题目链接] ybt 1232:Crossing River OpenJudge NOI 4.6 702:Crossing River 一本通里的翻译不够完整,OpenJudge中的英文原题中有对数据 ...

  6. 信息学奥赛一本通 1194:移动路线 | OpenJudge NOI 2.6 2718:移动路线

    [题目链接] ybt 1194:移动路线 OpenJudge NOI 2.6 2718:移动路线 [题目考点] 1. 坐标型动态规划 [解题思路] 解法1:递推 设状态数组dp,dp[i][j]表示从 ...

  7. 信息学奥赛一本通 1193:吃糖果 | OpenJudge NOI 2.6 1944:吃糖果

    [题目链接] OpenJudge NOI 2.6 1944:吃糖果 注:ybt 1193:吃糖果 页面打不开,可以在OpenJudge做该题. [题目考点] 1. 递推/递归 2. 搜索 [解题思路] ...

  8. 信息学奥赛一本通 1191:流感传染 | OpenJudge NOI 2.3 6262:流感传染

    [题目链接] ybt 1191:流感传染 OpenJudge NOI 2.3 6262:流感传染 [题目考点] 1. 二维数组 2. 队列 [解题思路] 用一个字符型二维数组存储各个房间的情况. 1. ...

  9. 信息学奥赛一本通 1185:单词排序 | OpenJudge NOI 1.10 10:单词排序

    [题目链接] ybt 1185:单词排序 OpenJudge NOI 1.10 10:单词排序 [题目考点] 1. 排序 [君义精讲]排序算法 2. 字符串比较 字符数组比较: char s1[N], ...

最新文章

  1. SQL Server 判断数据库是否存在,表是否存在
  2. 4个重要的量子理论实验综述
  3. 开放API接口 笑话、天气、新闻
  4. sql server 游标的使用
  5. 手机cpu排行_鲁大师手机芯片排行榜:麒麟990第四,骁龙855第五!
  6. android 变量Map集合
  7. java object转map_Java反序列化学习之CommonsCollections1
  8. [.Net 4.0]泛型的协变,以及高阶函数对泛型的影响 Part 1
  9. 在C#中对列表/数组进行碎片整理——关闭所有空白
  10. pip install 到指定的目录下,查看pip包位置
  11. 【渝粤教育】电大中专电商运营实操 (7)作业 题库
  12. 重定向与请求转发的区别
  13. JS多维数组转一维数组递归降维-数组扁平化
  14. 10W+字C语言从入门到精通保姆级教程(2021版下)
  15. ios 请在设置中打开相机权限_ios开发相机权限问题
  16. java判断list中是否包含某个值_java判断list是否包含某个值
  17. vue el-table 表格宽度无法缩小自适应
  18. 【1024程序员节】创作创富-对话议题-直播笔记
  19. Linux中ftp安装与基本操作
  20. protoc did not exit cleanly. Review output for more information报错

热门文章

  1. 创建表空间时ora-01119和ora-27040的处理
  2. Spark 0.9的安装配置
  3. 4.12L.02_CT Makefile
  4. Objective C学习总结(二)
  5. 8000种子用户创造指数级裂变,谁说当年校内网发家是靠鸡腿?
  6. 小米上市破发,其生态内部的隐患终于显露了?
  7. CanFestival字典生成
  8. oracle性能优化求生指南_oracle性能优化:高水位线(HWM)详解--如何计算HWM
  9. SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道!
  10. 《深入理解 Java 虚拟机》把这个知识点讲错了?