美文网首页
PAT-B 1018 1018 锤子剪刀布(C语言)

PAT-B 1018 1018 锤子剪刀布(C语言)

作者: dk_qi | 来源:发表于2019-01-11 10:46 被阅读0次

    题目

    链接:PAT (Basic Level) Practice 1018 锤子剪刀布

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


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

    输入格式:

    输入第 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
    

    思路

    • 甲的胜、平、负次数就是乙的负、平胜次数,所以只用求一次即可;
    1. 每次读入甲乙的手势,判断输赢;
    2. 分别记录甲和乙赢的手势;
    3. 分别找出甲和乙赢的最多的手势。

    代码

    #include<stdio.h>
    #include<string.h>
    int judge(char A, char B);
    char maxwin(int c, int j, int b);
    
    int main()
    {
      int N;
      scanf("%d", &N);
      getchar();
      int A_win = 0, A_draw = 0, A_lose = 0;
      int A_c = 0, A_j = 0, A_b = 0, B_c = 0, B_j = 0, B_b = 0;
      char A, B;
      char A_max, B_max;
      int result;
      for(int i = 0; i < N; i++){
        scanf("%c %c", &A, &B);
        getchar();
        result = judge(A, B);
        if(result == 0){
          A_draw++;
        }
        else if(result == 1){
                            A_win++;
          if(A == 'C')      A_c++;
          else if(A == 'J') A_j++;
          else              A_b++;
        }
        else if(result == -1){
                            A_lose++;
          if(B == 'C')      B_c++;
          else if(B == 'J') B_j++;
          else              B_b++;
        }
      }
      A_max = maxwin(A_c, A_j, A_b);
      B_max = maxwin(B_c, B_j, B_b);
      printf("%d %d %d\n", A_win, A_draw, A_lose);
      printf("%d %d %d\n", A_lose, A_draw, A_win);
      printf("%c %c\n", A_max, B_max);
      return 0;
    }
    //判断输赢
    int judge(char A, char B){
      int result;
      if(A == B) result = 0;
      else if((A == 'C' && B == 'J')||(A == 'J' && B == 'B')||(A == 'B' && B == 'C')) result = 1;
      else result = -1;
      return result;
    }
    //判断赢次数最多的手势
    char maxwin(int c, int j, int b){
      char max;
      if(b >= c){
        if(b >= j){
          max = 'B';
        }
        else{
          max = 'J';
        }
      }
      else if(c >= j){
        max = 'C';
      }
      else{
        max = 'J';
      }
      return max;
    }
    
    

    相关文章

      网友评论

          本文标题:PAT-B 1018 1018 锤子剪刀布(C语言)

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