题解 P1838 【三子棋I】
看完所有题解,写的都太复杂了!
打个表不就行了吗
代码:
#include <iostream>
#include <cstring>
using namespace std;
int hang[10]={0,//一整行连(编号1,2,3)
1,1,1,
2,2,2,
3,3,3},
lie[10]={0,//一整列连(编号4,5,6)
4,5,6,
4,5,6,
4,5,6},
djx1[10]={0,//左上↘右下对角线连(编号7)
7,0,0,
0,7,0,
0,0,7},
djx2[10]={0,//右上↙左下对角线连(编号8)
0,0,8,
0,8,0,
8,0,0};
int x[2][9];//两个人的棋每一种连法的连子数
string s;
int main()
{
cin>>s;
int i,len=s.size();
for (i=0;i<len;i++)
{
x[i%2][hang[s[i]-'0']]++;
x[i%2][lie[s[i]-'0']]++;
x[i%2][djx1[s[i]-'0']]++;
x[i%2][djx2[s[i]-'0']]++;
//各种连法都++
}
for (i=1;i<=8;i++)
if (x[0][i]==3){cout<<"xiaoa wins.\n";return 0;}//如果小a赢(连3个)
else if (x[1][i]==3){cout<<"uim wins.\n";return 0;}//如果uim赢(连3个)
cout<<"drew.\n";//都没赢就平局
return 0;
}