【题目描述】

显然,我们每个人都熟悉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的更多相关文章

  1. 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 ...

  2. POJ 2361 Tic Tac Toe

    题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...

  3. 【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 ...

  4. 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 ...

  5. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  6. Epic - Tic Tac Toe

    N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If ...

  7. python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  8. ACM-Team Tic Tac Toe

    我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...

  9. LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game

    地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...

  10. 【Python五篇慢慢弹】数据结构看python

    数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...

随机推荐

  1. ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记

    总览 你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过.这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记 ...

  2. Callback Function Essence

    Include Example Input: I am a. route execute finish. I am b. route execute finish. What is Callback ...

  3. 为什么NoSQL不支持事务

    为什么NoSQL不支持事务 1. 背景 看书<Neo4j权威指南>的时候,发现个问题:日常的NoSQL都不支持事务(ACID). 2. 问题 事务对数据的存储过程是有利的,既然事情是有利的 ...

  4. Oracle数据库字符集概述及修改方式

    1.字符集概述 Oracle语言环境的描述包括三部分:language.territory.characterset(语言.地域.字符集) language:主要指定服务器消息的语言,提示信息显示中文 ...

  5. 三维模型OBJ格式轻量化压缩主要技术方法浅析

    三维模型OBJ格式轻量化压缩主要技术方法浅析   OBJ格式是一种常用的三维模型文件格式,它以文本形式保存了模型的顶点.纹理坐标和法线信息.为了实现轻量化压缩,可以采用以下主要技术方法: 1.简化网格 ...

  6. QA|conftest使用了fixture但是没生效的原因|Pytest

    conftest.py中使用了fixture但是没生效,后面发现是因为autouse默认False导致,修改后代码如下 # conftest.py @pytest.fixture(scope='ses ...

  7. DesignPattern-part2

    title: "modern C++ DesignPattern-Part2" date: 2018-04-10T19:08:49+08:00 lastmod: 2018-04-1 ...

  8. ffmpeg 在xp和server2003/2008/2012上修复无法定位GetNumaNodeProcessorMaskEx的问题

    问题 在给开发一个手机视频网站时需要用到ffmpeg截取视频缩略图, 把项目提交到服务器(server2003/ server2008)上时, 发现在调用命令时会出现错误"无法定位GetNu ...

  9. Java爬虫实战系列2——动手写爬虫初体验

    在上面的章节中,我们介绍了几个目前比较活跃的Java爬虫框架.在今天的章节中,我们会参考开源爬虫框架,开发我们自己的Java爬虫软件. 首先,我们下载本章节要使用到的源代码,本章节主要提供了基于HTT ...

  10. 关于oop的一点回忆

    昨天在一个程序员行业群里看到别人发了一条消息, 大意是:要做好封装啦,不要随便用public啦,不要随便改别人代码啦. 说的好像就是我,因为,我这辈子最后悔的一件事情之一就是手贱改动别人代码. 那大概 ...