PAT1018 锤子剪刀布

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

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

输入格式:
输入第 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

思路参考了算法笔记的哈:

只想说一句:变量多的一定不要写错变量名........检查起来好难

#include<iostream>

using namespace std;

int change_c(char c) {
    if (c == 'B') return 0;
    if (c == 'C') return 1;
    if (c == 'J') return 2;
}
int main() {
    int n;//总共几轮
    cin >> n;
    int wina = 0, winb = 0, ping = 0;//胜利次数
    char c[3] = { 'B','C','J' };
    int at[3] = { 0 }, bt[3] = { 0 };//统计a,b用石头剪刀布的赢的次数的数组,a[0]表示用布赢的次数
    int a, b;
    char ca, cb;//输入的a,b
    for (int i = 0; i < n; i++) {
        cin >> ca >> cb;
        a = change_c(ca), b = change_c(cb);
        if ((a + 1) % 3 == b) {
            //a胜
            wina++;
            at[a]++;//统计a用石头剪刀布的赢的次数
        }
        else if (a == b) {
            ping++;
        }
        else {
            //b赢
            winb++;
            bt[b]++;
        }
    }
    cout << wina << " " << ping << " " << winb << endl;
    cout << winb << " " << ping << " " << wina << endl;
    //预测下次要出什么
    int maxa = 0, maxb = 0;

    for (int i = 0; i < 3; i++) {
        if (at[i] > at[maxa]) maxa = i;
        if (bt[i] > bt[maxb]) maxb = i;
    }

    cout << c[maxa] << " " << c[maxb] << endl;
    std::system("pause");
    return 0;
}
唯有热爱方能抵御岁月漫长。
原文地址:https://www.cnblogs.com/syq816/p/12301283.html