PAT B1018.锤子剪刀布

2024-06-19 18:20
文章标签 pat 锤子 剪刀 b1018

本文主要是介绍PAT B1018.锤子剪刀布,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图3-1所示。
 

 现给出两人的交锋记录,请统计双方的胜、平、负次数,并给出双方分别出什么手势的胜算最大。
输入格式
第一行给出正整数N(≤10'),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第一个学母代表甲方,第二个字母代表乙方,中间有一个空格。
 

输出格式
第一、二行分别给出甲、乙的胜、平、负次数,数字间以一个空格分隔。第三行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有一个空格。如果解不唯一,则输出按字典序最小的解。
 

输入样例

10
C J

J B

C B

B B

B C

C C

C B

J B

B C

J J


输出样例

5 3 2

2 3 5

B B
 

思路:

         根据题目要求。利用if语句实现。用times_A,times_B数组保存甲、乙的胜、平、负的情况。利用hand_A,hand_B数组保存获胜次数最多的手势。

        这里值得一提的是,巧妙的将字母转换为对应的字母,然后进行数字循环进行判断谁胜谁负。避免了大量的if...else判断,使得写法更加简洁。例如,‘B’对应0,‘C’对应1,‘J’对应2,它们正好是循环相克的顺序。利用k1,k2分别保存甲,乙的手势(0、1、2),则当(k1+1)%3==k2时,甲赢。当k1==k2时,平局,当(k2+1)%3==k1时,乙赢。

        另外,当输入格式是%c时,换行符\n会被读入,需要在合适的地方用getchar()将空格吸收——程序输入数据后闪退,基本就是这个问题导致。

代码实现

#include<cstdio>int change(char c)
{if(c=='B') return 0;//布  对应   0if(c=='C') return 1;//锤  对应   1if(c=='J') return 2;//剪  对应   2 
}int main()
{int N;char c1,c2;char mp[3] = {'B','C','J'};int times_A[3] = {0},times_B[3] = {0};//甲,乙胜、平、负的次数 int hand_A[3] = {0},hand_B[3] = {0}; //按BCJ顺序记录手势的获胜次数int k1,k2;scanf("%d",&N);for(int i=0;i<N;i++){getchar();scanf("%c %c",&c1,&c2);k1 = change(c1);  //转换为数字 k2 = change(c2);if((k1+1)%3==k2)  //甲胜,乙负 {times_A[0]++;times_B[2]++;hand_A[k1]++;	}	else if(k1==k2)  //甲乙平 {times_A[1]++;times_B[1]++;	} else  //乙胜,甲负 {times_A[2]++;times_B[0]++;hand_B[k2]++; }} int id1 = 0,id2 = 0;for(int i=0;i<3;i++)  //选出最大的数的下标 {if(hand_A[i]>hand_A[id1]) id1 = i;if(hand_B[i]>hand_B[id2]) id2 = i;}for(int i=0;i<3;i++) printf("%d ",times_A[i]);printf("\n");for(int i=0;i<3;i++) printf("%d ",times_B[i]);printf("\n");printf("%c %c",mp[id1],mp[id2]);return 0;
}

这篇关于PAT B1018.锤子剪刀布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075787

相关文章

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

连载:面向对象葵花宝典:思想、技巧与实践(4) - 面向对象是瑞士军刀还是一把锤子?

为什么要面向对象? 可以说,面向过程和计算机是如影随形的。从计算机诞生之日起,面向过程就是占据着主导地位的思想,即使到了现在,面向过程也是无处不在的,C语言、操作系统、协议栈、驱动系统,都是面向过程的代表。  那为什么还会有面向对象的诞生并流行呢?当然是面向过程存在某些不足,如果面向过程足够好,谁还费心费力的去搞另外一套呢?  前面我们提到,面向过程是一种机器的思想,

PAT (Advanced Level) Practice

1001:  题目大意: 计算 a+b 的结果,并以标准格式输出——即每三个数字一组,组之间用逗号分隔(如果数字少于四位,则不需要逗号分隔)  解析: 我们知道相加右正有负,对于样例来说 Sample Input: -1000000 9 Sample Output: -999,991 如果是从左往右,算上负号的话输出应该是-99,999,1 从右往左:-,999,991离正确

1050 String Subtraction——PAT甲级

Given two strings S1​ and S2​, S=S1​−S2​ is defined to be the remaining string after taking all the characters in S2​ from S1​. Your task is simply to calculate S1​−S2​ for any given strings. However,

1105 链表合并——PAT乙级

给定两个单链表 L1​=a1​→a2​→⋯→an−1​→an​ 和 L2​=b1​→b2​→⋯→bm−1​→bm​。如果 n≥2m,你的任务是将比较短的那个链表逆序,然后将之并入比较长的那个链表,得到一个形如 a1​→a2​→bm​→a3​→a4​→bm−1​⋯ 的结果。例如给定两个链表分别为 6→7 和 1→2→3→4→5,你应该输出 1→2→7→3→4→6→5。 输入格式: 输入首先在第一

1110 区块反转——PAT乙级

给定一个单链表 L,我们将每 K 个结点看成一个区块(链表最后若不足 K 个结点,也看成一个区块),请编写程序将 L 中所有区块的链接反转。例如:给定 L 为 1→2→3→4→5→6→7→8,K 为 3,则输出应该为 7→8→4→5→6→1→2→3。 输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105)、以及正整数 K (

携程编程大赛 (预赛第二场)第一题【剪刀石头布】

Problem Description 现有M个人一起玩剪刀石头布,以1-M编号,每人出一种,出过不再改变,但是我们并不知道它到底是哪一种。 (其中石头赢剪刀,剪刀赢布,布赢石头,一样则平) 裁判用两种说法对这M个人所构成的输赢关系进行描述:  一:"1 A B",表示第A个人和第B个人出的一样。  二:"2 A B",表示第A个人赢第B个人。  裁判对M个人,用以上两种说法,连说

[数据集][目标检测]锤子检测数据集VOC+YOLO格式1510张1类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1510 标注数量(xml文件个数):1510 标注数量(txt文件个数):1510 标注类别数:1 标注类别名称:["hammer"] 每个类别标注的框数: hammer 框数 = 1955 总框数:1955 使用

PAT-1039 到底买不买(20)(字符串的使用)

题目描述 小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以