1018 锤子剪刀布 (20分)
作者:互联网
1018 锤子剪刀布 (20分)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第 1 行给出正整数 N(≤10^5 ),即双方交锋的次数。随后 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
这题有问题,只有测试点2是正确的,其他都错了,没有找出来错在哪里,觉得逻辑完全没问题(苦笑.jpg)先放一放,以后再看
#include<stdio.h>
int Judge(char a,char b);
void JudgeMax(int j,int c,int b);
int jc,jb,jj,yc,yb,yj;
int Judge(char a, char b)
{
// flag: 0 平,1 甲胜,2 乙胜
// 甲 C J B
// 乙 C J B C J B C J B
// 0 1 2 2 0 1 1 2 0
int flag = 0;
if(a == 'C' && b == 'J')
{
flag = 1;
jc++;
}
if(a == 'J' && b == 'B')
{
flag = 1;
jj++;
}
if(a == 'B' && b == 'C')
{
flag = 1;
jb++;
}
if(a == 'C' && b == 'B')
{
flag = 2;
yb++;
}
if(a == 'J' && b == 'C')
{
flag = 2;
yc++;
}
if(a == 'B' && b == 'J')
{
flag = 2;
yj++;
}
return flag;
}
void JudgeMax(int j,int c,int b)
{
int max = b; //初始为B
//重复情况:
// b == c 或者 b == j或者 b == c == j:
// max 不变仍为b,则输出也是 B
// c == j > b: 先判断第一个if,第二个if max不变仍为c,输出 C
if(c > max)
max = c;
if(j > max)
max = j;
// b - c - j 顺序输出
if(max == b)
printf("B");
else if(max == c)
printf("C");
else if(max == j)
printf("J");
}
int main()
{
int n;
scanf("%d",&n);
int i;
char a,b;
int js,jf,p;
int flag;
js = jf = p = 0;
jc = jb = jj = yc = yb = yj = 0;
for(i = 0; i < n; i++)
{
fflush(stdin); //清除缓冲区,去除回车、空格的影响
scanf("%c %c",&a,&b);
flag = Judge(a,b);
// 甲胜 = 已负 甲平 = 乙平 甲负 = 乙胜
if(flag == 0)
p++;
if(flag == 1)
js++;
if(flag == 2)
jf++;
}
printf("%d %d %d\n",js,p,jf);
printf("%d %d %d\n",jf,p,js);
// printf("%d %d %d\n%d %d %d\n",jj,jc,jb,yj,yc,yb);
JudgeMax(jj,jc,jb);
printf(" ");
JudgeMax(yj,yc,jb);
}
标签:20,int,max,++,flag,1018,jb,printf,锤子 来源: https://blog.csdn.net/sunshine_kelan/article/details/106737591