zoukankan      html  css  js  c++  java
  • PAT——乙级1018

    题目是

    1018 锤子剪刀布 (20 point(s))

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

    FigCJB.jpg

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

    输入格式:

    输入第 1 行给出正整数 N(105​​),即双方交锋的次数。随后 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

     这道题很好理解,但有有点复杂。

    主要处理好B J C与数字之间的转换就好。

    我写的代码是

     1 #include<cstdio>
     2 int VS(char A, char B)
     3 {
     4     if (A == B) return 0;
     5     else if (A == 'C'&&B == 'J'|| A == 'J'&&B == 'B'|| A == 'B'&&B == 'C') return 1;
     6     else return -1;
     7 }
     8 int CharToNum(char temp)
     9 {
    10     if (temp == 'B') return 0;
    11     else if (temp == 'C') return 1;
    12     else return 2;
    13 }
    14 char NumToChar(int temp)
    15 {
    16     if (temp == 0) return 'B';
    17     else if (temp == 1) return 'C';
    18     else return 'J';
    19 }
    20 int main()
    21 {
    22     int n, A[3] = { 0,0,0 }, B[3] = {0,0,0}, A_win[3]= { 0,0,0 }, B_win[3]= { 0,0,0 }, temp;
    23     scanf("%d", &n);
    24     char A_value, B_value;
    25     
    26     for(int i=0;i<n;i++)
    27     {
    28         getchar();//清除缓存区的
    换行
    29         scanf("%c %c", &A_value, &B_value);
    30         temp = VS(A_value, B_value);
    31         if (temp == 0) { A[1]++;B[1]++; }
    32         else if (temp == 1) 
    33         { 
    34             A[0]++;B[2]++; 
    35             A_win[CharToNum(A_value)]++;
    36         }
    37         else 
    38         { 
    39             A[2]++;B[0]++; 
    40             B_win[CharToNum(B_value)]++;
    41         }
    42     }
    43     printf("%d %d %d
    ", A[0], A[1], A[2]);
    44     printf("%d %d %d
    ", B[0], B[1], B[2]);
    45     int Amax=0, Bmax=0,A_index,B_index;
    46     for (int i = 0;i < 3;i++)
    47     {
    48         if (A_win[i] > Amax) { Amax = A_win[i];A_index = i; }
    49         if (B_win[i] > Bmax){Bmax = B_win[i];B_index = i;}
    50     }
    51     printf("%c %c", NumToChar(A_index), NumToChar(B_index));
    52     return 0;
    53 }

    主要注意一定

    第28行,一定要清空数据缓存区,因为还有一个回车符

    我就栽在这个上面了,看了答案才明白。

    教材上的答案是先都把BJC转换为数字,然后根据数字去比较大小,而我是新建了一个函数,直接比较字符。还是教材的简单。

  • 相关阅读:
    聊聊自动化的打开方式
    浅谈如何提高自动化测试的稳定性和可维护性 (pytest&allure)
    Jmeter做压力测试的心得
    为什么测试人员必须掌握Linux?
    数据结构与算法系列 目录
    高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备
    Fastdfs文件系统扩容
    Linux下FastDFS分布式存储-总结及部署记录
    How to setup a Alpine Linux mirror
    修改内核参数开启转发
  • 原文地址:https://www.cnblogs.com/albert-yzp/p/9972169.html
Copyright © 2011-2022 走看看