专栏文章
题解:P13281 [GCJ 2013 Qualification] Tic-Tac-Toe-Tomek
P13281题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miow9dyw
- 此快照首次捕获于
- 2025/12/03 02:11 3 个月前
- 此快照最后确认于
- 2025/12/03 02:11 3 个月前
题目大意
这道题说白了就是在一个 的方形棋盘上下四子棋,谁先把四个子连成一条线谁就胜利。符号
T可以理解为一个万能符号,既可以作为X,帮X连成一条线;也可以作为O,帮O连成一条线。最后判断不同的游戏状态,根据题意输出即可。思路分析
根据题意模拟即可。直接暴力判断所有行、列和对角线的字符组成情况,如果某一行、某一列或某一条对角线有 个相同的字符或有三个相同的字符和一个
T,那么游戏就是已经分出胜负的状态。如果所有行、列、对角线都没有能连成一条线的字符,判断棋盘还有无空格。如果有空格,说明游戏尚未结束;如果没有空格,说明游戏结束,二人平局。AC code
#include<bits/stdc++.h>
using namespace std;
#define int long long
int T;
char a[10][10];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>T;
for(int t=1;t<=T;t++){
bool o=0,x=0;//o和x分别存储双方的输赢状态,0为输,1为赢
bool f=1;//f判断棋盘是否下满,1为下满,0为未下满
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
cin>>a[i][j];
if(a[i][j]=='.'){//如果棋盘上还有空格
f=0;//说明棋盘未下满
}
}
}
for(int i=1;i<=4;i++){//横着查找
if(a[i][1]=='X'||a[i][1]=='T'){
if((a[i][2]=='T'||a[i][2]=='X')&&(a[i][3]=='T'||a[i][3]=='X')&&(a[i][4]=='T'||a[i][4]=='X')){
x=1;
break;
}
}if(a[i][1]=='O'||a[i][1]=='T'){
if((a[i][2]=='T'||a[i][2]=='O')&&(a[i][3]=='T'||a[i][3]=='O')&&(a[i][4]=='T'||a[i][4]=='O')){
o=1;
break;
}
}
}
for(int j=1;j<=4;j++){//竖着查找
if(a[1][j]=='X'||a[1][j]=='T'){
if((a[2][j]=='T'||a[2][j]=='X')&&(a[3][j]=='T'||a[3][j]=='X')&&(a[4][j]=='T'||a[4][j]=='X')){
x=1;
break;
}
}if(a[1][j]=='O'||a[1][j]=='T'){
if((a[2][j]=='T'||a[2][j]=='O')&&(a[3][j]=='T'||a[3][j]=='O')&&(a[4][j]=='T'||a[4][j]=='O')){
o=1;
break;
}
}
}
if(a[1][1]=='X'||a[1][1]=='T'){//斜着查找
if((a[2][2]=='X'||a[2][2]=='T')&&(a[3][3]=='X'||a[3][3]=='T')&&(a[4][4]=='X'||a[4][4]=='T')) {
x=1;
}
}if(a[1][1]=='O'||a[1][1]=='T'){
if((a[2][2]=='O'||a[2][2]=='T')&&(a[3][3]=='O'||a[3][3]=='T')&&(a[4][4]=='O'||a[4][4]=='T')) {
o=1;
}
}
if(a[1][4]=='X'||a[1][4]=='T'){
if((a[2][3]=='X'||a[2][3]=='T')&&(a[3][2]=='X'||a[3][2]=='T')&&(a[4][1]=='X'||a[4][1]=='T')){
x=1;
}
}if(a[1][4]=='O'||a[1][4]=='T'){
if((a[2][3]=='O'||a[2][3]=='T')&&(a[3][2]=='O'||a[3][2]=='T')&&(a[4][1]=='O'||a[4][1]=='T')){
o=1;
}
}
if(x==1) cout<<"Case #"<<t<<": X won"<<"\n";//x胜利
else if(o==1) cout<<"Case #"<<t<<": O won"<<"\n";//o胜利
else if(x==0&&o==0&&f==1) cout<<"Case #"<<t<<": Draw"<<"\n";//棋盘上无空格,游戏结束,平局
else if(x==0&&o==0&&f==0) cout<<"Case #"<<t<<": Game has not completed"<<"\n";//棋盘上还有空格,游戏未结束
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...