大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 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
参考代码
https://blog.csdn.net/chr1991/article/details/50649508 感谢大佬
思路
- 每一次循环都需要读取缓存区的字符,所以要清空缓存区,以读取正确的字符。getchar()放在scanf之前可以清空缓存区,放在scanf之后吸收回车。
- 反复大量的代码可以自定义函数实现。
- case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”。执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不再判断是否与之匹配,直到遇到break语句才停止执行,退出switch语句。
C语言
#include <stdio.h>
void findmost(int B, int C, int J);
int main(void)
{
int n, i, Js = 0, Ys = 0, ping = 0, Jj = 0, Jc = 0, Jb = 0, Yj = 0, Yc = 0, Yb = 0;
char jia, yi;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
getchar();
scanf("%c %c", &jia, &yi);
if(jia == yi)
{
ping++;
}
else if( ((jia == 'C') && (yi == 'J')) || ((jia == 'J')&&(yi == 'B')) || ((jia == 'B') && (yi=='C')) )
{
Js++;
switch (jia)
{
case 'C':
{
Jc++;
break;
}
case 'J':
{
Jj++;
break;
}
case 'B':
{
Jb++;
break;
}
}
}
else
{
Ys++;
switch (yi)
{
case 'C':
{
Yc++;
break;
}
case 'J':
{
Yj++;
break;
}
case 'B':
{
Yb++;
break;
}
}
}
}
printf("%d %d %d\n", Js, ping, Ys);
printf("%d %d %d\n", Ys, ping, Js);
findmost(Jb, Jc, Jj);
printf(" ");
findmost(Yb, Yc, Yj);
return 0;
}
void findmost(int B, int C, int J)
{
if (J > C)
{
if ( J > B)
{
printf("J");
}
else
{
printf("B");
}
}
else if (J == C)
{
if (J > B)
{
printf("C");
}
else
{
printf("B");
}
}
else
{
if (C > B)
{
printf("C");
}
else
{
printf("B");
}
}
}
C++
存储B、C、J的时候声明一个长度为3的数组存储。便于后面比较
代码参考柳神
#include <iostream>
using namespace std;
int main()
{
int n, jia = 0, yi = 0, J[3] = {0}, Y[3] = {0};
cin >> n;
char jj, yy;
for(int i = 0; i < n; i++)
{
cin >> jj >> yy;
if(jj == 'B' && yy == 'C')
{
J[0]++;
jia++;
}
else if (jj == 'B' && yy == 'J')
{
Y[2]++;
yi++;
}
else if (jj == 'C' && yy == 'B')
{
Y[0]++;
yi++;
}
else if(jj =='C' && yy == 'J')
{
J[1]++;
jia++;
}
else if (jj == 'J' && yy == 'B')
{
J[2]++;
jia++;
}
else if (jj == 'J' && yy == 'C')
{
Y[1]++;
yi++;
}
}
cout << jia << " " << n-jia-yi << " " << yi << endl;
cout << yi << " " << n-jia-yi << " " << jia << endl;
int maxJ = J[0] >= J[1] ? 0 : 1;
maxJ = J[maxJ] >= J[2] ? maxJ : 2;
int maxY = Y[0] >= Y[1] ? 0 : 1;
maxY = Y[maxY] >= Y[2] ? maxY : 2;
char str[4] = {"BCJ"};
cout << str[maxJ] << " " << str[maxY];
return 0;
}