題目原文
現給出兩人的交鋒記錄,請統計雙方的勝、平、負次數,並且給出雙方分別出什麼手勢的勝算最大。
輸入格式:
輸入第 1 行給出正整數 N(≤105),即雙方交鋒的次數。隨後 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
代碼如下:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main(void) {
int Awin=0, Aloss=0, Alegel=0, Bwin=0, Bloss=0, Blegel=0;
int K;
char A, B;
int ANum[3], BNum[3];
scanf("%d", &K);
for (int i = 0; i < 3; i++) {
ANum[i] = 0;
BNum[i] = 0;
}
for (int i = 0; i < K; i++) {
scanf(" %c %c", &A, &B);
if (A == B) {
Alegel++;
Blegel++;
}
else if ((A == 'C' && B == 'J') || (A == 'J' && B == 'B') || (A == 'B' && B == 'C')) {
Awin++;
Bloss++;
if (A == 'C') {
ANum[1]++;
}
else if (A == 'J') {
ANum[2]++;
}
else
ANum[0]++;
}
else {
Aloss++;
Bwin++;
if (B == 'C') {
BNum[1]++;
}
else if (B == 'J') {
BNum[2]++;
}
else
BNum[0]++;
}
}
int NumberA=0, NumberB=0;
int max;
max = ANum[0];
for (int i = 0; i < 3; i++) {
if (max < ANum[i]) {
max = ANum[i];
NumberA = i;
}
}
max = BNum[0];
for (int i = 0; i < 3; i++) {
if (max < BNum[i]) {
max = BNum[i];
NumberB = i;
}
}
printf("%d %d %d\n", Awin, Alegel, Aloss);
printf("%d %d %d\n", Bwin, Blegel, Bloss);
if (NumberA == 0) {
printf("B ");
}
else if (NumberA == 1) {
printf("C ");
}
else
printf("J ");
if (NumberB == 0) {
printf("B");
}
else if (NumberB == 1) {
printf("C");
}
else
printf("J");
return 0;
}