• PAT (Basic Level) Practise:1018. 锤子剪刀布


    【题目链接】

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

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

    输入格式:

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

    提交代码:

     1 #include <stdio.h>
     2 
     3 // 0: 平,1:甲胜,2:乙胜
     4 int calc_winner(int a, int b)
     5 {
     6     if(a == b)
     7         return 0;
     8     
     9     if((a == 'J' && b == 'B') || (a == 'C' && b == 'J') || (a == 'B' && b == 'C'))
    10         return 1;
    11 
    12     return 2;
    13 }
    14 
    15 char max_c_j_b(int c, int j, int b)
    16 {
    17     int tmp;
    18 
    19     tmp = (c >= j) ? c : j;
    20     tmp = (b >= tmp) ? b : tmp;
    21 
    22     if(tmp == b)
    23         return 'B';
    24     else if(tmp == c)
    25         return 'C';
    26     else
    27         return 'J';
    28 }
    29 
    30 int main(void)
    31 {
    32     int cnt;
    33     char a, b;
    34     int i, tmp;
    35     int a_C, a_J, a_B;
    36     int b_C, b_J, b_B;
    37     int a_win, a_draw, a_lose;
    38 
    39     scanf("%d", &cnt);
    40 
    41     getchar();
    42 
    43     a_C = a_J = a_B = 0;
    44     b_C = b_J = b_B = 0;
    45     a_win = a_draw = a_lose = 0;
    46 
    47     for(i = 0; i < cnt; i++)
    48     {
    49         scanf("%c %c", &a, &b); 
    50         getchar();
    51         tmp = calc_winner(a, b);
    52         if(tmp == 0)
    53         {
    54             a_draw += 1;
    55         }
    56         else if(tmp == 1)
    57         {
    58             a_win += 1;
    59 
    60             if(a == 'C')
    61                 a_C += 1;
    62             else if(a == 'J')
    63                 a_J += 1;
    64             else
    65                 a_B += 1;
    66         }
    67         else
    68         {
    69             a_lose += 1;
    70 
    71             if(b == 'C')
    72                 b_C += 1;
    73             else if(b == 'J')
    74                 b_J += 1;
    75             else
    76                 b_B += 1;
    77         }
    78     }
    79 
    80     printf("%d %d %d
    ", a_win, a_draw, a_lose);
    81     printf("%d %d %d
    ", a_lose, a_draw, a_win);
    82 
    83     printf("%c %c", max_c_j_b(a_C, a_J, a_B), max_c_j_b(b_C, b_J, b_B));
    84     return 0;
    85 }
  • 相关阅读:
    网络编程之即时通信程序(聊天室)(一)通信流程简介及通信协议定制
    C#常用加密方法解析
    ASP.NET常用数据绑定控件优劣总结
    使用XPO开发时可以参考使用的架构
    渠道会上的体会
    如何利用第三方SDK开发MSN机器人以及实现语音视频?
    对 XPO 的一些问题的解答
    c++ 参数传递 之引用形参 GIS
    指针与引用的区别 GIS
    c++ const 修饰数组 GIS
  • 原文地址:https://www.cnblogs.com/utank/p/4755098.html
Copyright © 2020-2023  润新知