目录
一,题目
描述
石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。
游戏规则:石头打剪刀,布包石头,剪刀剪布。
现在,需要你写一个程序来判断石头剪子布游戏的结果。
输入描述
第一行是一个整数N,表示一共进行了N次游戏。1≤N≤100。
接下来N行的每一行包括两个字符串,表示游戏参与者Player1,Player2的选择(石头、剪子或者是布):
S1S2
字符串之间以空格隔开S1,S2只可能取值在{“Rock”, “Scissors”, “Paper”}(大小写敏感)中。
输出描述
输出包括N行,每一行对应一个胜利者(Player1或者Player2),或者游戏出现平局,则输出Tie。
用例输入 1
3
Rock Scissors
Paper Paper
Rock Paper
用例输出 1
Player1
Tie
Player2
二,思路
需要定义的字符串数组:
- 为了方便存储两位玩家的出拳,需要定义两个长度为9的字符数组char b[9],c[9]; (题目标明玩家只能有三种输入:“Scissors”, Rock”, “Paper”,最长的字符串“Scissors”长度为8,如果要存储这个字符串“Scissors”,字符数组的长度需要加上空格1,所以字符数组的总长度需要设为9)
- 在判断玩家输赢之后,不能直接输出判断后的结果,需要利用一个二维字符数组a[100][8]将判断的结果存储起来,之所以要定义一个100行8列的二维字串数组,是因为题目中“一共进行了N次游戏。1≤N≤100”,最多会有100次的判断结果输出,即有100行,并且每次判断的结果字符串长度都不大于7,最长的字符串是“Player1”(或Player2),加上空格1,二维字符数组的列长度就需要设为8。
通过上图,已经知道了程序的实现流程,接下来就是开始编写代码,在编写代码的过程中需要借助的c++库函数有:
- strlen(b):用于返回字符数组b的长度
- strcpy(a[0],"sss"):复制字符串“sss”到二维字符数组 a[100][8] 的第 0+1 行中。因为字符串"sss"的长度小7,所以可以存储进去:如果变成"ssssssssssssssssssss",就会有问题,如下👇:
- 最后在遍历二维字符数组,输出结果的时候只需要遍历二维字符数组的行(hang)就行(xing)。
三,代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
char a[100][8];
cin>>N;
for(int i=0; i<N; i++)
{
char b[9],c[9];
cin>>b>>c;
int e=strlen(b),f=strlen(c);
if(e==f) strcpy(a[i],"Tie");
else if(e ==5 |f == 5)
{
if(e>f) strcpy(a[i],"Player1");
else strcpy(a[i],"Player2");
}
else if(e!=5 & f!=5)
{
if(e>f) strcpy(a[i],"Player2");
else strcpy(a[i],"Player1");
}
}
for(int i=0;i<N;i++){
cout<<a[i]<<endl;
}
return 0;
}
有问题请在评论区留言或者是私信我,回复时间不超过一天。