1018

作者: 笔墨流年乱浮生 | 来源:发表于2018-09-07 12:01 被阅读0次

//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的比较函数有多个出口,翁恺老师说尽量单一出口,因此对比较函数做了变动。

相关文章

  • 2019-10-18

    1018

  • [PAT]A1018(Public Bike Managemen

    原题回顾 PAT_A1018原文链接 1018 Public Bike Management (30分) 作者: ...

  • 笔记

    犯罪心理 1018

  • 随笔

    有个爱你的人不容易-----1018

  • 1018

    今天早晨,是鼻涕虫感冒的节奏,赶脚自己好难受,还要赶飞机,司机师傅大概还在实习期……哈哈哈让我做出过山车的感觉,某...

  • 1018

    //1018 锤子剪刀布(20 分)//大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如下://现...

  • 1018

  • 1018

  • 1018

    努力生活,不论怎样 怕的是你有一颗想扎在泥潭里的心 怕的是你以为会慢慢变好 一下子全部变回了原来的样子 我好像一直...

  • 1018

    早上好!#幸福实修#~每天进步1%#幸福实修12班@吕敏一富阳 20171018(22/30) 【幸福三朵玫瑰】 ...

网友评论

      本文标题:1018

      本文链接:https://www.haomeiwen.com/subject/hetcgftx.html