PAT1018锤子剪刀布
2015-10-06 11:11
363 查看
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
输出格式:
输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:
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
解题思路:一个函数用来统计胜负,一个用来统计出哪种拳胜率最高。
一,参赛者结构体,包含了胜负平的次数,与获胜时出拳的记录
二,判断函数,根据剪刀石头布的规则来判断胜负,并肩负记录“胜拳”的功能
三,输出甲、乙获胜次数最多的手势。如果解不唯一,则输出按字母序最小的解
四,主函数
五,输出结果
输入格式:
输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
输出格式:
输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:
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
解题思路:一个函数用来统计胜负,一个用来统计出哪种拳胜率最高。
一,参赛者结构体,包含了胜负平的次数,与获胜时出拳的记录
struct peo{ int win; int draw; int lose; int whoWin[3]; };
二,判断函数,根据剪刀石头布的规则来判断胜负,并肩负记录“胜拳”的功能
int panDuan(char a, char b,peo &p1,peo &p2){ if (a == 'C'&&b == 'J'){++p1.whoWin[0] ; return 1; } else if (a == 'J'&&b == 'B'){ ++p1.whoWin[1]; return 1; } else if (a == 'B'&&b == 'C'){ ++p1.whoWin[2]; return 1; } else if (a == b)return 2; else if (a == 'J'&&b == 'C'){ ++p2.whoWin[0]; return 3; } else if (a == 'B'&&b == 'J'){ ++p2.whoWin[1]; return 3; } else if (a == 'C'&&b == 'B'){ ++p2.whoWin[2]; return 3; } else return 0; }
三,输出甲、乙获胜次数最多的手势。如果解不唯一,则输出按字母序最小的解
char winWin(peo p1){ char Fist[3] = { 'C', 'J', 'B' }; char WF = 'X'; int k = 0,L=0; int maxdd = -1; for (int i = 0; i < 3; ++i){ if (maxdd < p1.whoWin[i]){ maxdd = p1.whoWin[i]; k = i; WF = Fist[k]; } else if (maxdd == p1.whoWin[i]){ L = i; if (WF > Fist[L]){ WF = Fist[L]; } } } return WF; }
四,主函数
void PAT1018(){ peo A, B; A.win = 0; A.draw = 0; A.lose = 0; A.whoWin[0] = 1; A.whoWin[2] = 0; A.whoWin[1] = 0; B.win = 0; B.draw = 0; B.lose = 0; B.whoWin[0] = 1; B.whoWin[2] = 0; B.whoWin[1] = 0; int N = 10; string AP= "CJCBBCCJBJ",BP="JBBBCCBBCJ"; for (int i = 0; i < N; ++i){ switch (panDuan(AP[i],BP[i],A,B)) { case 1: {++A.win; ++B.lose; break; } case 2: {++A.draw; ++B.draw; break; } case 3: {++A.lose; ++B.win; break; } case 0: {cout << "输入错误请检查\n"; } } } cout << A.win << " " << A.draw << " " << A.lose << endl; cout << B.win << " " << B.draw << " " << B.lose << endl; cout<<winWin(A)<<" "<<winWin(B)<<endl; }
五,输出结果
相关文章推荐
- 矩阵相关运算的java实现
- VM-ware 虚拟机不能全屏解决方法
- leetcode58题---java解法
- 在windows上安装redis并设置密码
- OC学习笔记——类的扩展
- Yii2-保存数据库,获取最后添加的id
- FragmentPagerAdapter和FragmentStatePagerAdapter之间的差别、监听器OnPageChangeListener
- ubuntu 14.04安装为知笔记
- 擅长排列的小明
- Linux文件管理之压缩解压缩
- Python笔记--除法
- 擅长排列的小明
- 创建一个二维数组,求路线,使得和最小
- HDU 1029 Ignatius and the Princess IV
- 弱校联萌十一大决战之厉兵秣马H. Hanoi Towers poj3572
- C语言-蜗牛爬墙
- 解决svn的working copy locked并且cleanup恢复不能的情况
- iOS静态库小结--(yoowei)
- JS实现的文字与图片定时切换效果代码
- Halcon学习笔记_04:划痕、油污、瑕疵