我的思路:暴力模拟
后参考大佬的思路:https://www.acwing.com/activity/content/code/content/3089966/
觉得细节有三:
1,用set数据结构避免重复记录
2,判断每一行或每一列或斜列采用sort函数排序
3,结果输出set集的尺寸即可
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
char f[3][3];
set<char> only;
set<pair<char,char>> team;
void judge(char a,char b,char c){
char tmp[3]={a,b,c};
sort(tmp,tmp+3);//进行排序
if(tmp[0]==tmp[2]){//如果第一个和第三个相等则全为相同字符
only.insert(tmp[0]);
}else if(tmp[0]==tmp[1]||tmp[1]==tmp[2]){//如果第二个与第一个或第三个相同,则说明有两个相同
team.insert({tmp[0],tmp[2]});//则保存开头和结尾不相同的字母
}
}
int main(){
for(int i=0;i<3;i++)cin>>f[i];
judge(f[0][0],f[0][1],f[0][2]);//第一行
judge(f[1][0],f[1][1],f[1][2]);//第二行
judge(f[2][0],f[2][1],f[2][2]);//第三行
judge(f[0][0],f[1][0],f[2][0]);//第一列
judge(f[0][1],f[1][1],f[2][1]);//第二列
judge(f[0][2],f[1][2],f[2][2]);//第三列
judge(f[0][0],f[1][1],f[2][2]);//正对角
judge(f[0][2],f[1][1],f[2][0]);//斜对角
cout<<only.size()<<endl;
cout<<team.size()<<endl;
return 0;
}