1018

//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

C:

#include <stdio.h>
char cmp(int winC,int winB,int winJ);
int main()
{
    int N;
    char line[5];//用于放每次处理的字符串,因为每次"字母 空格 字母 \n \0"
    int AwinB = 0,AwinC = 0,AwinJ = 0;
    int BwinB = 0,BwinC = 0,BwinJ = 0;
    int ping = 0;
    scanf("%d", &N);
    while ( getchar() != '\n');//现在缓冲区里存放的是1 0 '\n' '\0',这条语句的意义是清空缓存区?
    for (int i = 0; i < N; i++) {
        fgets(line, 5, stdin);//从标准输入中读入4(5-1)个字符,存储在line中
        if (line[0] == line[2]) ping++;
        if (line[0] == 'B' && line[2] == 'C') AwinB++;
        if (line[0] == 'B' && line[2] == 'J') BwinJ++;
        if (line[0] == 'C' && line[2] == 'B') BwinB++;
        if (line[0] == 'C' && line[2] == 'J') AwinC++;
        if (line[0] == 'J' && line[2] == 'B') AwinJ++;
        if (line[0] == 'J' && line[2] == 'C') BwinC++;
    }
    
    int Awin = AwinC + AwinB + AwinJ;
    int Bwin = BwinC + BwinB + BwinJ;
    printf("%d %d %d\n", Awin, ping,Bwin);
    printf("%d %d %d\n", Bwin, ping,Awin);
    printf("%c %c",cmp(AwinC, AwinB, AwinJ),cmp(BwinC, BwinB, BwinJ));
    return 0;
}
char cmp(int winC,int winB,int winJ)
{
    char f;
    if (winB >= winC && winB >= winJ) f = 'B';//等号只能出现一次,出现在字母序小的上
    if (winC > winB && winC >= winJ) f = 'C';
    if (winJ > winB && winJ > winC)  f = 'J';
    return f;
}

这道题做了蛮久,一方面是对多行数据输入的处理不熟悉,花了较长时间去看了getchar 和 fgets,主要问题 while ( getchar() != '\n');的作用,目前分析看来是为了把缓冲区里的N给清除,防止后面fgets的时候错读,不知道是否理解正确。

另外这题OliverLew的比较函数有多个出口,翁恺老师说尽量单一出口,因此对比较函数做了变动。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容