思路:
题解一个比较巧妙的地方: 如何判断石头剪刀布的谁胜谁负呢 ?
通过下面代码,将所出的转换为数字012,然后通过此处 (k1 + 1) % 3 == k2 可以判断出是谁赢。
int change(char c){
if(c == 'B') return 0;
else if(c == 'J') return 1;
else if(c == 'C') return 2;
}
代码
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int change(char c){
if(c == 'B') return 0;
else if(c == 'J') return 1;
else if(c == 'C') return 2;
}
int main(int argc, char** argv) {
int n;
char c1, c2; // 从 c1 c2 是甲乙出的手势
int k1, k2; // k1 k2 是甲乙转换手势对应的数字
int timesA[3] = {
0}, timesB[3] = {
0}; //甲乙 胜 平 输
int handsA[3] = {
0}, handsB[3] = {
0}; //甲乙胜时用的手
cin >> n;
while(n--){
getchar();
cin >> c1 >> c2;
k1 = change(c1);
k2 = change(c2);
if( (k1 + 1) % 3 == k2){
//乙赢
timesA[2]++;
timesB[0]++;
handsB[k2]++;
} else if(k1 == k2){
//平局
timesA[1]++;
timesB[1]++;
} else {
//乙赢
timesA[0]++;
timesB[2]++;
handsA[k1]++;
}
}
printf("%d %d %d\n",timesA[0], timesA[1], timesA[2]);
printf("%d %d %d\n",timesB[0], timesB[1], timesB[2]);
int id1 = 0, id2 = 0;
for(int i = 0; i < 3; i++){
if(handsA[i] > handsA[id1]) id1 = i;
if(handsB[i] > handsB[id2]) id2 = i;
}
char mp[3] = {
'B','J','C'};
cout << mp[id1] << " " << mp[id2];
return 0;
}