当前位置: 首页 > 工具软件 > TAC > 使用案例 >

[cf]Tic-tac-toe

景帅
2023-12-01

模拟题,暴力判断。

感觉会很麻烦、实际一条条写下来也还好啦~

//Tic-tac-toe   2013.7.21

#include <iostream>

char win(char t[3][3])
{
    int r1=0,r2=0,r3=0,c1=0,c2=0,c3=0,x1=0,x2=0;
    if(t[0][0]!='.'&&(t[0][0]==t[0][1]&&t[0][0]==t[0][2])) r1=1;
    if(t[1][1]!='.'&&(t[1][0]==t[1][1]&&t[1][0]==t[1][2])) r2=1;
    if(t[2][2]!='.'&&(t[2][0]==t[2][1]&&t[2][0]==t[2][2])) r3=1;
    if(t[0][0]!='.'&&(t[0][0]==t[1][0]&&t[0][0]==t[2][0])) c1=1;
    if(t[1][1]!='.'&&(t[0][1]==t[1][1]&&t[0][1]==t[2][1])) c2=1;
    if(t[2][2]!='.'&&(t[0][2]==t[1][2]&&t[0][2]==t[2][2])) c3=1;
    if(t[1][1]!='.'&&(t[0][0]==t[1][1]&&t[0][0]==t[2][2])) x1=1;
    if(t[1][1]!='.'&&(t[2][0]==t[1][1]&&t[1][1]==t[0][2])) x2=1;
    if(r1+r2+r3+c1+c2+c3+x1+x2>1)
    {
        if(r1+c1==2||r1+x1==2||c1+x1==2) return t[0][0];
        if(r1+c2==2) return t[0][1];
        if(r1+c3==2||r1+x2==2||x2+c3==2) return t[0][2];
        if(r2+c1==2) return t[1][0];
        if(r2+c3==2) return t[1][2];
        if(r2+c2==2||r2+x1==2||r2+x2==2||c2+x1==2||c2+x2==2||x1+x2==2) return t[1][1];
        if(r3+c1==2||r3+x2==2||c1+x2==2) return t[2][0];
        if(r3+c2==2) return t[2][1];
        if(r3+c3==2||r3+x1==2||x1+c3==2) return t[2][2];
        return 'i';
    }
    if(r2||c2||x1||x2)
        return t[1][1];
    if(r1||c1)
        return t[0][0];
    if(r3||c3)
        return t[2][2];
    return '.';//no win
}


using namespace std;
const int maxn = 9;
int main()
{
    char tb[3][3];
    cin>>tb[0][0]>>tb[0][1]>>tb[0][2];
    cin>>tb[1][0]>>tb[1][1]>>tb[1][2];
    cin>>tb[2][0]>>tb[2][1]>>tb[2][2];
    int cX = 0,c0 = 0;
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            if(tb[i][j]=='X')  cX++;
            else if(tb[i][j]=='0') c0++;
        }
    }
    if(c0>4 || cX<c0 || cX>c0+1)
    {
        cout<<"illegal"<<endl;
        return 0;
    }
    char c = win(tb);
    if('X'== c )
    {
        if(cX==c0) cout<<"illegal"<<endl;
        else cout<<"the first player won"<<endl;
    }
    else if('0'==c)
    {
        if(cX==c0+1) cout<<"illegal"<<endl;
        else cout<<"the second player won"<<endl;
    }
    else if('i'==c)
        cout<<"illegal"<<endl;
    else if((cX+c0==9)&&('.'== c ))
        cout<<"draw"<<endl;
    else if(cX+c0<9 && ('.'== c ))
    {
        if(cX==c0) cout<<"first"<<endl;
        else if(cX==c0+1) cout<<"second"<<endl;
    //    else cout<<"unexpected fault!1"<<endl;
    }
    //else
    //    cout<<"unexpected fault!2"<<endl;
    return 0;
}



 类似资料: