这一题我没有太好的思路,就是把可能赢的8种情况都分析一遍,也就是3行3列加上两个斜行
这里用含有8个元素的vector数组,数据类型为自己设置的node
#include<bits/stdc++.h>
using namespace std;
struct node {
int cnt1;// ‘1’的个数
int cnt2;// ‘2’的个数
vector<char>ch;//该行或列或斜行上的元素
};
int main() {
int n;
cin >> n;
string s;
cin >> s;
while (n--) {
char c[3][3];
char a = s[0],b;
s.erase(0,1);
if (a == 'A')
b = 'B';
else b = 'A';
vector<node>v(8);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cin >> c[i][j];
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 0) {
v[0].ch.push_back(c[i][j]);
}
else if (i == 1) {
v[1].ch.push_back(c[i][j]);
}
else {
v[2].ch.push_back(c[i][j]);
}
if (j == 0) {
v[3].ch.push_back(c[i][j]);
}
else if (j == 1) {
v[4].ch.push_back(c[i][j]);
}
else {
v[5].ch.push_back(c[i][j]);
}
if (i == j) {
v[6].ch.push_back(c[i][j]);
}
if (i == 2 - j) {
v[7].ch.push_back(c[i][j]);
}
}
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < (int)v[i].ch.size(); j++) {
if (v[i].ch[j] == '1') {
v[i].cnt1++;
}
else if (v[i].ch[j] == '2') {
v[i].cnt2++;
}
}
if (v[i].cnt1 == 3) {
cout << a << endl;
break;
}
else if (v[i].cnt2 == 3) {
cout << b << endl;
break;
}
}
}
}