admin管理员组文章数量:1621910
题目链接
https://pintia/problem-sets/994805260223102976/problems/994805304020025344
题解
刚开始做很懵逼,可能并不难吧,但就是感觉做出来的话代码会很不优雅,所以想了半天。
然后把这个题放了会儿,有了思路。现在第3个测试点没过,我又读了一遍代码,真的不是很懂哪里有错……
// PAT BasicLevel 1018
// https://pintia/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://wwwblogs/chouxianyu/
欢迎讨论和交流!
转载于:https://wwwblogs/chouxianyu/p/11306113.html
版权声明:本文标题:PAT乙级1018 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728852503a1176843.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论