[CF3C] Tic-tac-toe
【题目描述】
显然,我们每个人都熟悉Tic-tac-toe游戏。
这个游戏的规则是:两个人依次在3X3的棋盘上下棋。
当一个人有3个棋子连成一行或一列或一纵列时,则这个人已经获得胜利。这时则停止下棋。第一个人先下,第二个人后下。
现在,请你判断一游戏的状态。
first,现在轮到第一个人下。
second,现在轮到第二个人下。
the first player won,如果第一个人刚刚赢得比赛。
the second player won,如果第二个人刚刚赢得比赛。
illegal,如果这种棋局不可能出现。
draw,如果棋盘已经下满且无法分出胜负。
【输入】
一个3X3的矩阵,用X和.和0表示。
X表示第一个人的棋子,0表示第二个人的棋子。
.表示该位置还未下。
【输出】
一个字符串,即上述六种状态的一种。
【输入样例】
X0X
.0.
.X.
【输出样例】
second
【数据范围】
30(3个点) 答案只含有first,second和draw
70(7个点) 答案只含有其他3种情况
时间限制 : 1s
空间限制 : 256M
极其繁琐的分类讨论。
先看一下怎么样子是不可能的。首先如果两个人的棋子数量差距太大,肯定是不对的。准确的说,如果先手比后手多出超过1个或者后手比先手多,那就不合法。同时,如果两个人都赢了,本来一个人一赢游戏就停止,所以也不合法。
平局的情况好像也很简单,如果棋盘满了并且没有人赢,那就平局。
剩下的要先看一下有没有人赢,如果有那么就输出他赢了,否则就看一下先手是否比后手多,判断下一个是谁就好了。
#include<iostream>
using namespace std;
char c[5][5];
int cnt1,cnt2,f1,f2;
int main()
{
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
cin>>c[i][j];
cnt1=cnt2=0;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(c[i][j]=='0')
cnt1++;
if(c[i][j]=='X')
cnt2++;
}
}
if(cnt1>cnt2||cnt2-cnt1>1)
{
cout<<"illegal";
return 0;
}
if(c[1][1]=='0'&&c[2][1]=='0'&&c[3][1]=='0')
f1=1;
if(c[1][2]=='0'&&c[2][2]=='0'&&c[3][2]=='0')
f1=1;
if(c[1][3]=='0'&&c[2][3]=='0'&&c[3][3]=='0')
f1=1;
if(c[1][1]=='0'&&c[1][2]=='0'&&c[1][3]=='0')
f1=1;
if(c[2][1]=='0'&&c[2][2]=='0'&&c[2][3]=='0')
f1=1;
if(c[3][1]=='0'&&c[3][2]=='0'&&c[3][3]=='0')
f1=1;
if(c[1][1]=='0'&&c[2][2]=='0'&&c[3][3]=='0')
f1=1;
if(c[1][3]=='0'&&c[2][2]=='0'&&c[3][1]=='0')
f1=1;
if(c[1][1]=='X'&&c[2][1]=='X'&&c[3][1]=='X')
f2=1;
if(c[1][2]=='X'&&c[2][2]=='X'&&c[3][2]=='X')
f2=1;
if(c[1][3]=='X'&&c[2][3]=='X'&&c[3][3]=='X')
f2=1;
if(c[1][1]=='X'&&c[1][2]=='X'&&c[1][3]=='X')
f2=1;
if(c[2][1]=='X'&&c[2][2]=='X'&&c[2][3]=='X')
f2=1;
if(c[3][1]=='X'&&c[3][2]=='X'&&c[3][3]=='X')
f2=1;
if(c[1][1]=='X'&&c[2][2]=='X'&&c[3][3]=='X')
f2=1;
if(c[1][3]=='X'&&c[2][2]=='X'&&c[3][1]=='X')
f2=1;
if(f1&&f2)
{
cout<<"illegal";
return 0;
}
if(cnt1+cnt2==9&&!f1&&!f2)
{
cout<<"draw"<<endl;
return 0;
}
if(f1)
cout<<"the second player won";
else if(f2)
cout<<"the first player won";
else if(cnt1==cnt2)
cout<<"first";
else if(cnt2>cnt1)
cout<<"second";
return 0;
}
[CF3C] Tic-tac-toe的更多相关文章
- Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy
1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...
- POJ 2361 Tic Tac Toe
题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...
- 【leetcode】1275. Find Winner on a Tic Tac Toe Game
题目如下: Tic-tac-toe is played by two players A and B on a 3 x 3 grid. Here are the rules of Tic-Tac-To ...
- 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe
题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...
- Epic - Tic Tac Toe
N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If ...
- python 井字棋(Tic Tac Toe)
说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...
- ACM-Team Tic Tac Toe
我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...
- LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game
地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...
- 【Python五篇慢慢弹】数据结构看python
数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
随机推荐
- Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档
Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档, 还支持 xlsx 和 docx 文件的加密(具体使用看文档) ...
- [初学C#] 第二习题 : 快递跟踪信息查询
刚学C#, 折腾的一个小玩意. 熟悉和了解C#这门编程语言. 没有啥特殊意义 解锁技能 - System.Net 的 WebRequest等http请求 - Newtonsoft.Json 这个第三方 ...
- Golang日志新选择:slog
go1.21中,slog这一被Go语言团队精心设计的结构化日志包正式落地,本文将带领读者上手slog,体会其与传统log的差异. WHY 在日志处理上,我们从前使用的log包缺乏结构化的输出,导致信息 ...
- 【krpano】KRPano自动缩略图分组插件
该插件可以展示场景缩略图,并支持场景分组. 下载地址:http://pan.baidu.com/s/1dFj7v0l 使用说明: 插件共有两个文件,auto_thumbs.xml和tooltip.xm ...
- 【krpano】淘宝buy+案例
这是一个类似淘宝buy+的案例,是基于krpano全景开发工具二次开发的全景视频.WebVR.360°环物.全景视频热点添加于一身的综合性案例.现在将案例上传网站供krpano技术人员和爱好者大家共同 ...
- 「atcoder - agc054c」Roughly Sorted
link. 高妙题,我只会到构造下界那一步-- 构造下界比较容易,只需要注意到交换一次最多让序列向合法迫近一步即可.则答案下界为 \(\sum_i \max\{\left(\sum_{j < i ...
- RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo
前言 目标开发任务还有个功能,就是播放rtsp摄像头,当然为了更好的坐这个个,我们必须支持rtsp播放失败之后重新尝试,比如5s重新尝试打开一次,从而保障联网后重新打开,然后达成这个功能. D ...
- oracle优化-分页查询新认识
在写这篇文章之前,对分页查询的认识就是经典的三层嵌套:第①层:获得需要的数据,第②层:用rownum限制展示数据的上限,第③层:用rownum的别名rn限制展示数据的下限. 在生产中遇见一个两层嵌套满 ...
- destoon根据目录下的html文件生成地图索引
因为项目需要,destoon根据目录下的html文件生成地图索引,操作方法,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记录-1
一个5.7版本的MySQL单点数据库,版本信息是: Server version: 5.7.31-log MySQL Community Server (GPL) 数据量已达到760G,日常存在性能问 ...