[PAT乙级]1018. 锤子剪刀布 (20)

来源:互联网 发布:查询淘宝关键字搜索量 编辑:程序博客网 时间:2024/05/16 12:05

1018. 锤子剪刀布 (20)

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

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

输入格式:

输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。

输出格式:

输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。

输入样例:10C JJ BC BB BB CC CC BJ BB CJ J输出样例:5 3 22 3 5B B

思路:

  • 定义vector数组JIA存储甲胜、平、负次数,乙胜、平、负次数与甲相对,最后倒序输出即可
  • 定义vector数组JIAWin存储甲胜利时为B,C,J次数,定义vector数组YIWin存储甲胜利时为B,C,J次数,最后输出两数组最大值对应的符号

代码:

#include <iostream>#include <vector>using namespace std;int main(){    int N;    cin >> N;    char arr[3] = {'B', 'C', 'J'};    vector<int> JIA(3);    vector<int> JIAWin(3);//B C J    vector<int> YIWin(3);    for(int i=0; i<N; i++){        char a, b;        cin >> a >> b;        if((a=='B' && b=='C') || (a=='C' && b=='J') || (a=='J' && b=='B')){            JIA[0]++;//甲赢            if(a=='B')    JIAWin[0]++;//甲赢 B            if(a=='C')    JIAWin[1]++;//甲赢 C            if(a=='J')    JIAWin[2]++;//甲赢 J        }        if((b=='B' && a=='C') || (b=='C' && a=='J') || (b=='J' && a=='B')){            JIA[2]++;//甲输            if(b=='B')    YIWin[0]++;//乙赢 B            if(b=='C')    YIWin[1]++;//乙赢 C            if(b=='J')    YIWin[2]++;//乙赢 J        }        if((a=='B' && b=='B') || (a=='C' && b=='C') || (a=='J' && b=='J'))            JIA[1]++;//平局    }    int JIAMAX=0;    int YIMAX=0;    for(int j=1; j<JIAWin.size(); j++){        if(JIAWin[JIAMAX] < JIAWin[j])            JIAMAX = j;    }    for(int j=1; j<YIWin.size(); j++){        if(YIWin[YIMAX] < YIWin[j])            YIMAX = j;    }    for(int i=0; i<JIA.size(); i++){        if(i != 0)            cout << " ";        cout << JIA[i];    }    cout << endl;    for(int i=JIA.size()-1; i>=0; i--){        if(i != (JIA.size()-1))            cout << " ";        cout << JIA[i];    }    cout << endl;    cout << arr[JIAMAX] << " " << arr[YIMAX] << endl;    return 0;}