PAT乙级1018

65 阅读1分钟

image.png 就是简单的统计甲乙赢,平局的次数(输的个数用总数减),和出什么手势赢得次数。没什么好说的。但听奇幻的是题目有一个如果解不唯一,输出字母序最小的解,我并没有判定这个就过了,蛮怪的,但想一想好像判定时用个的>=就够了。

//现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

//C:锤子 J:剪刀 B:布
int n;//交锋次数
char x,y;//x:甲 y:乙
int winer_x,winer_y,draw;//记录甲乙分别赢,平局的次数
int y_j,y_c,y_b,x_j,x_c,x_b;//要求获胜次数最多的手势

//判断胜负
//cjb
void win(char x,char y){
    //甲出剪刀
    if(x == 'J'){
        if(y == 'J')
            draw++;
        else if(y == 'C'){
            winer_y++;
            y_c++;
        }
        else if(y == 'B'){
            winer_x++;
            x_j++;
        }
    }
    
    //甲出石头
    if(x == 'C'){
        if(y == 'J'){
            winer_x++;
            x_c++;
        }
        else if(y == 'C'){
            draw++;
        }
        else if(y == 'B'){
            winer_y++;
            y_b++;
        }
    }

     //甲出布
    if(x == 'B'){
        if(y == 'J'){
            winer_y++;
            y_j++;
        }
        else if(y == 'B'){
            draw++;
        }
        else if(y == 'C'){
            winer_x++;
            x_b++;
        }
    }
}

//判断甲乙分别出哪个胜算大
//只求胜
char cmp(int b,int c,int j){
    char ans;
    if(b >= c && b >= j)
        ans = 'B';
    else if(c >= b && c >= j)
        ans = 'C';
    else
        ans = 'J';

    return ans;
}

int main(){
    cin >> n;
    int m = n;
    while(n--) {
        cin >> x >> y;//输入本次交锋的出法

        win(x,y);        
        
    }
    
    char res_y = cmp(y_b,y_c,y_j);
    char res_x = cmp(x_b,x_c,x_j);

    cout << winer_x << " " << draw << " " << m - winer_x - draw << endl;
    cout << winer_y << " " << draw << " " << m - winer_y - draw << endl;
    cout << res_x << " " << res_y << endl;
    return 0;
}

//挺离谱的,本来还想看看解布唯一的状况,唯没想到直接过了,奇怪。

希望下次代码可以写的简短一点┭┮﹏┭┮,柳婼写的只有我的三分之一/(ㄒoㄒ)/~~ 题目链接