PAT乙级1018
题目链接
https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344
题解
刚开始做很懵逼,可能并不难吧,但就是感觉做出来的话代码会很不优雅,所以想了半天。
然后把这个题放了会儿,有了思路。现在第3个测试点没过,我又读了一遍代码,真的不是很懂哪里有错……
// PAT BasicLevel 1018
// https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344
#include <iostream>
using namespace std;
void PK(char ,char);
int aWin[3]={0,0,0};
int bWin[3]={0,0,0};
int equalCount=0;
int main()
{
// 交锋回合数
int n;
cin >>n;
// 获取交锋信息
char a,b;
for(int i=0;i<n;++i){
cin >> a >> b;
PK(a,b);
}
// 输出结果
int aWinMaxCount=0,bWinMaxCount=0;//甲和乙三种出手方式的最大胜利次数
int aWinMaxIndex=0,bWinMaxIndex=0;//甲和乙胜利最多的出手方式下标
int aWinCount=0;
for(int i=0;i<3;i++){
// 更新甲的胜利次数
aWinCount+=aWin[i];
// 更新甲胜利最多的攻击方式
if (aWin[i]>aWinMaxCount){
aWinMaxCount=aWin[i];
aWinMaxIndex=i;
}
// 更新乙胜利最多的攻击方式
if (bWin[i] > bWinMaxCount){
bWinMaxCount = aWin[i];
bWinMaxIndex = i;
}
}
// 输出结果
char choice[]="BCJ";
cout << aWinCount << ' '<< equalCount << ' ' << n - aWinCount - equalCount << endl;
cout << n - aWinCount - equalCount << ' ' << equalCount << ' ' << aWinCount << endl;
cout << choice[aWinMaxIndex] << ' ' << choice[bWinMaxIndex] << endl;
//system("pause");
return 0;
}
void PK(char a, char b)
{
if(a==b){
equalCount++;
}else{
switch (a){
case 'B':
if(b=='C')
aWin[0]++;
else
bWin[2]++;
break;
case 'C':
if (b == 'B')
bWin[0]++;
else
aWin[1]++;
break;
case 'J':
if (b == 'C')
bWin[1]++;
else
aWin[2]++;
break;
}
}
}
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!