【PAT Basic Level】1018 锤子剪刀布

    技术2022-07-11  88

    目录

    题目分析代码 专栏:PAT乙级刷题笔记

    题目

    大家应该都会玩“锤子剪刀布”的游戏。现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

    输入格式

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

    分析

    分别用两个数组a[3]、b[3]记录A、B用布、锤子、剪刀赢的次数(按照字母排序),用e记录平局次数。最后输的次数就是局数-赢-平。 再把数组a、b中最大的对应的字母输出。 些许繁琐。

    代码

    #include<iostream> #include<string> using namespace std; int main(){ int n; char t1,t2; cin>>n; int a[3] = {0},b[3] = {0},e = 0; for(int i = 0;i < n;++i){ cin>>t1>>t2; if(t1 == 'B'){ if(t2 == 'B') ++e; if(t2 == 'C') ++a[0]; if(t2 == 'J') ++b[2]; } if(t1 == 'C'){ if(t2 == 'B') ++b[0]; if(t2 == 'C') ++e; if(t2 == 'J') ++a[1]; } if(t1 == 'J'){ if(t2 == 'B') ++a[2]; if(t2 == 'C') ++b[1]; if(t2 == 'J') ++e; } } cout<<a[0]+a[1]+a[2]<<" "<<e<<" "<<b[0]+b[1]+b[2]<<endl; cout<<b[0]+b[1]+b[2]<<" "<<e<<" "<<a[0]+a[1]+a[2]<<endl; if((a[0] >= a[1]) && (a[0] >= a[2]))cout<<"B "; if((a[0] < a[1]) && (a[1] >= a[2]))cout<<"C "; if((a[0] < a[2]) && (a[1] < a[2]))cout<<"J "; if((b[0] >= b[1]) && (b[0] >= b[2]))cout<<"B"; if((b[0] < b[1]) && (b[1] >= b[2]))cout<<"C"; if((b[0] < b[2]) && (b[1] < b[2]))cout<<"J"; return 0; }
    Processed: 0.012, SQL: 9