解法一:
#include <iostream>
#include <vector>
using namespace std;
int judge(char a, char b)
{
//end==0表示平局,end==1表示甲贏,end==2表示乙贏
int end = 0;
if (a==b)
{
end = 0;
}
else if ((a=='C'&&b=='J')||(a=='J'&&b=='B')||(a=='B'&&b=='C'))
{
end = 1;
}
else
{
end = 2;
}
return end;
}
int main()
{
int N = 0;
cin >> N;
int i = 0;
char j, y;
int m=0, n=0, m1=0, m2=0, m3=0, n1=0, n2=0, n3 = 0; //m,n分別代表甲,乙贏的次數,m1,m2,m3,n1,n2,n3爲甲乙分別出錘子,剪刀,布時贏的次數
int p = 0; //p分別代表甲乙平的次數
vector<char>v1;
vector<char>v2;
for ( i = 0; i < N; i++)
{
cin >> j >> y;
v1.push_back(j);
v2.push_back(y);
}
for ( i = 0; i < N; i++)
{
if (judge(v1[i],v2[i])==1)
{
m++;
if (v1[i]=='C')
{
m1++;
}
else if(v1[i]=='J')
{
m2++;
}
else if (v1[i]=='B')
{
m3++;
}
}
else if(judge(v1[i], v2[i]) == 2)
{
n++;
if (v2[i] == 'C')
{
n1++;
}
else if (v2[i] == 'J')
{
n2++;
}
else if (v2[i] == 'B')
{
n3++;
}
}
else
{
p++;
}
}
cout << m << " " << p << " " << n << endl;
cout << n << " " << p << " " << m << endl;
if (m3>=m2&&m3>=m1)
{
cout << "B ";
}
else if (m1>=m2)
{
cout << "C ";
}
else
{
cout << "J ";
}
if (n3>=n2&&n3>=n1)
{
cout << "B" << endl;
}
else if (n1>=n2)
{
cout << "C" << endl;
}
else
{
cout << "J" << endl;
}
return 0;
}
解法二:
#include<iostream>
#include<map>
using namespace std;
int judge(int a,int b){
if((a==1&&b==2)||(a==2&&b==3)||(a==3&&b==1)) return 1;//甲勝
if((b==1&&a==2)||(b==2&&a==3)||(b==3&&a==1)) return 2;//乙勝
else if(a==b) return 3;//平局
}
int find_max(int c[]){
int mx = 0,ans;
for(int i=3;i>0;i--){
if(c[i]>=mx){
mx = c[i];
ans = i;
}
}
return ans;
}
int main(){
map<char,int> mp;
mp['B'] = 1;//按字母序小的方式賦值
mp['C'] = 2;
mp['J'] = 3;
int n,i;
char jia,yi;
int jia_win=0,jia_lose=0,jia_draw=0;
int yi_win=0,yi_lose=0,yi_draw=0;
cin>>n;
int jia_counter[4] = {0};
int yi_counter[4] = {0};
for(i=0;i<n;i++){
cin>>jia>>yi;
int temp = judge(mp[jia],mp[yi]);
if(temp == 1){
jia_win++;yi_lose++;jia_counter[mp[jia]]++;
}
if(temp == 2){
jia_lose++;yi_win++;yi_counter[mp[yi]]++;
}
else if(temp == 3){
jia_draw++;yi_draw++;
}
}
int ans1 = find_max(jia_counter);
int ans2 = find_max(yi_counter);
//cout<<ans1<<" "<<ans2<<endl;
cout<<jia_win<<" "<<jia_draw<<" "<<jia_lose<<endl;
cout<<yi_win<<" "<<yi_draw<<" "<<yi_lose<<endl;
for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++)
{
if(it->second==ans1)
cout<<it->first<<" ";
}
for(map<char,int>::iterator it = mp.begin();it!=mp.end();it++)
{
if(it->second==ans2)
cout<<it->first;
}
return 0;
}