1018 锤子剪刀布
分数 20
作者 CHEN, Yue
单位 浙江大学
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入样例:
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
我的代码(30行ac):
#include<iostream>
using namespace std;
char max(int J,int B,int C){//若解不唯一,按字母序返回
if(B>=J&&B>=C) return 'B';
else if(C>=B&&C>=J) return 'C';
return 'J';
}
int main(){
int n; cin>>n;
char a[n],b[n];
for(int i=0;i<n;++i) cin>>a[i]>>b[i];
int a_win,b_win,tie = 0;
int a_J_win = 0,a_B_win = 0,a_C_win = 0,b_J_win = 0,b_B_win = 0,b_C_win = 0;
for(int i=0;i<n;++i){
if(a[i]==b[i]) ++tie;
else{
if(a[i]=='J'&&b[i]=='B') ++a_J_win;
else if(a[i]=='B'&&b[i]=='C') ++a_B_win;
else if(a[i]=='C'&&b[i]=='J') ++a_C_win;
else if(b[i]=='J'&&a[i]=='B') ++b_J_win;
else if(b[i]=='B'&&a[i]=='C') ++b_B_win;
else if(b[i]=='C'&&a[i]=='J') ++b_C_win;
}
}
a_win = a_J_win+a_B_win+a_C_win; b_win = b_J_win+b_B_win+b_C_win;
cout<<a_win<<" "<<tie<<" "<<b_win<<endl;
cout<<b_win<<" "<<tie<<" "<<a_win<<endl;
cout<<max(a_J_win,a_B_win,a_C_win)<<" "<<max(b_J_win,b_B_win,b_C_win);
return 0;
}
ps:
1.耗时40min,这是一道模拟题,多手写模拟情况就可以做出来;
2.注意限制条件,如:“如果解不唯一,则输出按字母序最小的解”。