Basic Level PAT 1018 锤子剪刀布

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

Basic Level  PAT 1018 锤子剪刀布

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

文章插图
输出格式:
输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔 。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格 。如果解不唯一,则输出按字母序最小的解 。
输入样例:
10C JJ BC BB BB CC CC BJ BB CJ J
输出样例:
5 3 22 3 5B B
主要思路:
step1:B,C,J是一个循环相克的环,所以我们先将B、C、J转换为对应的0,1,2,这里写一个函数来实现转换 。
step2:判断胜负的条件,甲胜已的条件是(k1+1)%3==k2,打平的条件是k1==k2
【Basic LevelPAT 1018 锤子剪刀布】step2:分别记录下甲乙双方的比赛情况,和获胜的时候出的是什么手势
代码如下:
#include#include#include#include/****锤子剪刀布**@author Fhujinwu*/int exchang(char c){if(c=='B') return 0;//布 if(c=='C') return 1;//锤子if(c=='J') return 2;//剪刀 }int main(){int n;char mp[3]={'B','C','J'};int timeA[3]={0},timeB[3]={0},timeC[3]={0};//分别记录A、B、C、胜负平 scanf("%d",&n);int handA[3]={0},handB[3]={0};char c1,c2;//存放甲乙出的手势 int k1,k2;for(int i=0;ihandA[id1]) id1=i;if(handB[i]>handB[id1]) id2=i;}printf("%c %c\n",mp[id1],mp[id2]);return 0;}