c++习题23-石头剪子布

目录

一,题目

二,思路

三,代码


一,题目

描述

石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。

游戏规则:石头打剪刀,布包石头,剪刀剪布。

现在,需要你写一个程序来判断石头剪子布游戏的结果。

输入描述

第一行是一个整数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

二,思路

需要定义的字符串数组:

  1. 为了方便存储两位玩家的出拳,需要定义两个长度为9的字符数组char b[9],c[9]; (题目标明玩家只能有三种输入:“Scissors”, Rock”, “Paper”,最长的字符串“Scissors”长度为8,如果要存储这个字符串“Scissors”,字符数组的长度需要加上空格1,所以字符数组的总长度需要设为9) 
  2. 在判断玩家输赢之后,不能直接输出判断后的结果,需要利用一个二维字符数组a[100][8]将判断的结果存储起来,之所以要定义一个100行8列的二维字串数组,是因为题目中“一共进行了N次游戏。1≤N≤100”,最多会有100次的判断结果输出,即有100行,并且每次判断的结果字符串长度都不大于7,最长的字符串是“Player1”(或Player2),加上空格1,二维字符数组的列长度就需要设为8。

通过上图,已经知道了程序的实现流程,接下来就是开始编写代码,在编写代码的过程中需要借助的c++库函数有:

  1. strlen(b):用于返回字符数组b的长度
  2. strcpy(a[0],"sss"):复制字符串“sss”到二维字符数组 a[100][8] 的第 0+1 行中。因为字符串"sss"的长度小7,所以可以存储进去:如果变成"ssssssssssssssssssss",就会有问题,如下👇:
  3. 最后在遍历二维字符数组,输出结果的时候只需要遍历二维字符数组的行(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;
}

有问题请在评论区留言或者是私信我,回复时间不超过一天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值