← 返回

CF1846B Rudolph and Tic-Tac-Toe 题解

其实就是个模拟题,按题意模拟即可

题意简述

题意可以理解为有三个人个人在 $3\times3$ 的方格中下井字棋,如果三个相同的棋子连成一条线,就可以判定输赢。如果没有人赢则输出 DRAW

分析

连接的方式可分为三类:横行、竖列、对角线。共八种情况,所以只需要判断是否满足这八种情况然后输出即可。注意在判断的时候要排去 . ,不能把空行也算作一种。具体可看代码。

代码

inline void Solve()
{
     string a[3];//存储地图,注意string是从零开始的
     cin >> a[0];
     cin >> a[1];
     cin >> a[2];
     //cout << T<<endl;
     //cout << a[0][2]<<endl;
     //注意排除空行
     if (a[0][0] == a[1][0]&&a[0][0] == a[2][0]&&a[0][0]!='.'){//判断第一列
          cout << a[0][0] << endl;
          return;
     }
     if(a[0][1]==a[1][1]&&a[0][1]==a[2][1]&&a[0][1]!='.'){//第二列
          cout << a[0][1] << endl;//cout << 1;
           return;
     }
     if(a[0][2]==a[1][2]&&a[0][2]==a[2][2]&&a[0][2]!='.'){//第三列
          cout << a[0][2] << endl;
          return;
     }
     if (a[0][0] == a[0][1]&&a[0][0] == a[0][2]&&a[0][0]!='.'){//第一行
          cout << a[0][0] << endl;
          return;
     }
     if(a[1][0]==a[1][1]&&a[1][0]==a[1][2]&&a[1][0]!='.'){//第二行
             cout << a[1][0] << endl;
             return;
     }
     if(a[2][0]==a[2][1]&&a[2][0]==a[2][2]&&a[2][0]!='.'){//第三行
             cout << a[2][0] << endl;
             return;
     }
     if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]&&a[0][0]!='.'){//对角线1
             cout << a[0][0] << endl;
             return;
     }
     if(a[0][2]==a[1][1]&&a[0][2]==a[2][0]&&a[0][2]!='.'){//对角线2
             cout << a[0][2] << endl;
             return;
     }
     cout << "DRAW" << endl;//如果都不符合
}

本文采用 CC BY-NC 4.0 许可协议,转载请注明出处并保持非商业用途。