栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【每日一题C】#151. 双手石头剪刀布

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【每日一题C】#151. 双手石头剪刀布

题目描述

小明和李华自创了一个双手石头、剪刀、布的游戏。他们背对背分别用左手和右手各出一个石头、剪刀或布的手势(双手可以出一样的),然后根据下面的规则判断输赢。

​ 剪刀、石头、布的规则:

  1. 如果一方出石头,一方出剪刀,则石头方获胜;
  2. 如果一方出石头,一方出布,则出布方获胜;
  3. 如果一方出剪刀,一方出布,则出剪刀方获胜;
  4. 如果两方出的一样,则平局。

​ 双手剪刀、石头、布的规则:

​ 一、如果小明的左手赢了李华的左手:

  1. 如果小明的左手赢了李华的右手或平局,则小明获胜;
  2. 如果小明的左手输给了李华的右手:
    1. 如果小明的右手赢了李华的右手,则小明获胜;
    2. 如果小明的右手输给了李华的右手或平局,则李华获胜。

二、如果小明的左手与李华的左手平局:

  1. 如果小明的右手赢了李华的右手,则小明获胜;
  2. 如果小明的右手输给了李华的右手,则李华获胜;
  3. 如果小明的右手与李华的右手平局,则平局。

​ 三、如果小明的左手输给了李华的左手:

  1. 如果小明的右手输给了李华的左手或平局,则李华获胜;
  2. 如果小明的右手赢了李华的左手;
    1. 如果小明的右手赢了李华的右手或平局,则小明获胜;
    2. 如果小明的右手输给了李华的右手,则李华获胜。

输入

​ 第一行输入小明左手和右手的手势。

​ 第二行输入李华左手和右手的手势。

​ (Y表示剪刀 O表示石头 H表示布)

输出

​输出为一行,如果小明赢了,输出 MING,如果李华赢了,输出 LIHUA,如果平局输出 TIE。

思路分析

1、不想通过大量的if、else进行判断,所以考虑压缩到少量if中,但是这样if中的逻辑语句就变长了,个人暂时想不到其他更优解,所以先记录下本次思路做法。

2、Y表示剪刀 ,O表示石头, H表示布,Y、O、H的ASCII码十进制值分别为89、79、72;

3、O赢Y,Y赢H,H赢O,可以记作‘O'-'Y'=-10、'Y'-'H'=17、'H'-'O'=-7,即-10、17、-7为前者赢于后者的标志数;

4、观察三组输赢规则,在每组规则中找出最好判断输赢的情况作为最佳判断条件;

5、利用字符串数组来存输出字符,利用判断语句的k值作为字符串数组的下标。

代码展示

#include
int main(){
	char M[2],H[2];
	char s[3][6]={"TIE","MING","LIHUA"};
	int k=0;//k=0平局,1小明获胜,2李华获胜
	scanf("%c %cn",&M[0],&M[1]);
	scanf("%c %c",&H[0],&H[1]);
	if((M[0]-H[0])==-10||(M[0]-H[0])==17||(M[0]-H[0])==-7){//小明左手赢李华左手
		if(((M[0]-H[1])==10||(M[0]-H[1])==-17||(M[0]-H[1])==7)&& (((M[1]-H[1])==10||(M[1]-H[1])==-17||(M[1]-H[1])==7))||((M[1]-H[1])==0||(M[1]-H[1])==0||(M[1]-H[1])==0)) k=2;
		else k=1;
	}
	else if((M[0]-H[0])==0||(M[0]-H[0])==0||(M[0]-H[0])==0){//小明左手平局李华左手
		if((M[1]-H[1])==-10||(M[1]-H[1])==17||(M[1]-H[1])==-7) k=1;
		else if((M[1]-H[1])==10||(M[1]-H[1])==-17||(M[1]-H[1])==7) k=2;
		else ;
	}
	else {//李华左手赢小明左手
		if(((M[1]-H[0])==-10||(M[1]-H[0])==17||(M[1]-H[0])==-7)&& (((M[1]-H[1])==-10||(M[1]-H[1])==17||(M[1]-H[1])==-7))|| ((M[1]-H[1])==0||(M[1]-H[1])==0||(M[1]-H[1])==0)) k=1;
		else k=2;
	}
	printf("%s",s[k]);
	return 0;
}

运行结果

Y O
H H
MING

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938133.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号