• PAT 乙级 1018 锤子剪刀布 (20) C++版


    1018. 锤子剪刀布 (20)

    时间限制
    100 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

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

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

    输入格式:

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


    思路:比较输赢时用ACS码差值比较

     1 // 1018.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 #include<typeinfo>
     7 
     8 using namespace std;
     9 
    10 int win = 0, lose = 0;//统计甲赢和输的次数
    11 int X_times[3] = { 0 }, Y_times[3] = { 0 };//统计X和Y各项赢的次数
    12 
    13 //函数声明
    14 void judge(char X, char Y);//比较函数
    15 void show(int N);//打印函数
    16 int get_max(int a[]);//求得最大数值的下标
    17 
    18 int main()
    19 {
    20     char X, Y;
    21     int N;
    22 
    23     cin >> N;
    24 
    25     for (int i = 0; i < N; ++i)
    26     {
    27         cin >> X >> Y;
    28 
    29         judge(X, Y);
    30     }
    31 
    32     show(N);
    33 
    34     return 0;
    35 }
    36 
    37 //比较函数
    38 void judge(char X, char Y)
    39 {
    40     //比较甲乙两人之间字母之差比较得出输赢
    41     switch (static_cast<int>(X - Y))
    42     {
    43     case -1://B C
    44         ++win;
    45         ++X_times[0];
    46         break;
    47     case -8://B J
    48         ++lose;
    49         ++Y_times[2];
    50         break;
    51     case 1://C B
    52         ++lose;
    53         ++Y_times[0];
    54         break;
    55     case -7://C J
    56         ++win;
    57         ++X_times[1];
    58         break;
    59     case 8://J B
    60         ++win;
    61         ++X_times[2];
    62         break;
    63     case 7://J C
    64         ++lose;
    65         ++Y_times[1];
    66     default://相等
    67         break;
    68     }
    69 }
    70 
    71 //打印函数
    72 void show(int N)
    73 {
    74     int max = 0, i;
    75     char result[3] = { 'B', 'C', 'J' };
    76 
    77     cout << win << " " << N - win - lose << " " << lose << endl
    78         << lose << " " << N - win - lose << " " << win << endl
    79         << result[get_max(X_times)] <<" "
    80         << result[get_max(Y_times)] << endl;
    81 }
    82 
    83 //求得最大数值的下标
    84 int get_max(int times[])
    85 {
    86     int i, max=0;
    87 
    88     for (i = 1; i < 3; i++)
    89         if (times[max] < times[i])
    90             max = i;
    91 
    92     return max;
    93 }
  • 相关阅读:
    operator模块和functools模块
    函数注解
    用户定义的可调用类型、从定位参数到仅限关键字参数
    可调用对象
    nxos启动的初始化和https访问nx-api
    网络安全基础之网络协议与安全威胁
    华为AC中服务集命令解释配置
    转:图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)
    windows下python3 python2 共存下安装virtualenvwrapper
    关于网络安全学习的网站
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/7237094.html
Copyright © 2020-2023  润新知