就是简单的统计甲乙赢,平局的次数(输的个数用总数减),和出什么手势赢得次数。没什么好说的。但听奇幻的是题目有一个如果解不唯一,输出字母序最小的解,我并没有判定这个就过了,蛮怪的,但想一想好像判定时用个的>=就够了。
//现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
#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ㄒ)/~~ 题目链接