PAT Basic 1018. 锤子剪刀布

PAT Basic 1018. 锤子剪刀布

1. 题目描述:

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

锤子剪刀布

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

2. 输入格式:

输入第 1 行给出正整数 \(N\)\(≤10^5\)),即双方交锋的次数。随后 \(N\) 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。

3. 输出格式:

输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。

4. 输入样例:

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

5. 输出样例:

5 3 2
2 3 5
B B

6. 性能要求:

Code Size Limit
16 KB
Time Limit
200 ms
Memory Limit
64 MB

思路:

编写一个判断胜负的子函数,然后题目要求统计获胜次数最多的手势,这里定义了两个全局变量,分别用于统计获胜的手势和失败的手势。这里还要注意读入字符时,用getchar()消耗掉额外的空格或换行符。

这里统计获胜手势的次数和统计获胜次数重复了啊,还可以优化。。。

My Code:

#include <stdio.h>
#define WIN 1 // jia win yi
#define LOSS -1 // jia loss yi
#define DRAW 0 // jia draw yi

int judgeRound(char jia, char yi);
int winStatistics[3] = {0}, lossStatistics[3] = {0};

int main(void)
{
    int roundNum = 0;
    char tempJia, tempYi;
    
    int countWin = 0, countLoss = 0, countDraw = 0;
    
    
    scanf("%d", &roundNum);
    getchar();
    
    for(int i=0; i<roundNum; i++)
    {
        //scanf("%c %c", &tempJia, &tempYi);
        scanf("%c", &tempJia);
        getchar();
        scanf("%c", &tempYi);
        getchar();
        //printf("%c %c\n", tempJia, tempYi);
        switch(judgeRound(tempJia,tempYi))
        {
            case WIN:
                countWin++;
                break;
            case LOSS:
                countLoss++;
                break;
            case DRAW:
                countDraw++;
                break;
        }
        
    }
    
    printf("%d %d %d\n", countWin, countDraw, countLoss);
    printf("%d %d %d\n", countLoss, countDraw, countWin);
    
    if(winStatistics[2] >= winStatistics[1] && winStatistics[2] >= winStatistics[0])
        printf("B ");
    else if(winStatistics[0] >= winStatistics[1] && winStatistics[0] >= winStatistics[2])
        printf("C ");
    else if(winStatistics[1] >= winStatistics[0] && winStatistics[1] >= winStatistics[2])
        printf("J ");
    
    if(lossStatistics[0] >= lossStatistics[2] && lossStatistics[0] >= lossStatistics[1])
        printf("B");
    else if(lossStatistics[1] >= lossStatistics[2] && lossStatistics[1] >= lossStatistics[0])
        printf("C");
    else if(lossStatistics[2] >= lossStatistics[1] && lossStatistics[2] >= lossStatistics[0])
        printf("J");
    
    return 0;
}

int judgeRound(char jia, char yi)
{
    if(jia == 'C')
    {
        if(yi == 'C')
            return DRAW;
        else if(yi == 'J')
        {
            winStatistics[0]++;
            return WIN;          
        }
        else if(yi == 'B')
        {
            lossStatistics[0]++;
            return LOSS; 
        }

    }
    else if(jia == 'J')
    {
        if(yi == 'C')
        {
            lossStatistics[1]++;
            return LOSS;       
        }

        else if(yi == 'J')
            return DRAW;
        else if(yi == 'B')
        {
            winStatistics[1]++;
            return WIN;            
        }  
    }
    else if(jia == 'B')
    {
        if(yi == 'C')
        {
            winStatistics[2]++;
            return WIN;          
        }

        else if(yi == 'J')
        {
            lossStatistics[2]++;
            return LOSS;   
        }
        else if(yi == 'B')
            return DRAW;
    }
}
posted @ 2023-03-09 11:51  十豆加日月  阅读(15)  评论(0编辑  收藏  举报