其他分享
首页 > 其他分享> > 1018 锤子剪刀布 (20分)

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