[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 ...
随机推荐
- [语音识别] 基于Python构建简易的音频录制与语音识别应用
语音识别技术的快速发展为实现更多智能化应用提供了无限可能.本文旨在介绍一个基于Python实现的简易音频录制与语音识别应用.文章简要介绍相关技术的应用,重点放在音频录制方面,而语音识别则关注于调用相关 ...
- Auto-GPT免费尝鲜之初体验-使用攻略和总结
写在前面的废话 ChatGPT 的交互模式,是和一个 "人" 对话聊天. 如果你想了解更多ChatGPT和AI绘画的相关知识,请参考:ChatGPT注册和变现思路,AI绘画教程汇总 ...
- API接口的研发与应用
API(Application Programming Interface,应用程序编程接口)指的是为不同的软件应用程序提供编程接口的一组协议.规则以及工具的集合,以便它们能够互相交互,实现数据通 ...
- Jquery tableExport.js将网页中的表格导出为Excel
需求:将如下网页中的所有表格一次导入到Excel文件中. 方法:使用jQuery的tableExport.js插件,可以将网页中指定的table表格数据导出到Excel文件,而不需要经过后台. 操作步 ...
- 「luogu - P3158」「cqoi 2011」放棋子
link. 解读一下,大概就是一种颜色放进去就会占据一行一列,dp 状态就好想了:\(f_{i,j,k}\) 表示恰好用完前 \(k\) 种颜色的所有棋子,占据了 \(i\) 行 \(j\) 列的方案 ...
- Java 21 新特性:Record Patterns
Record Patterns 第一次发布预览是在JDK 19.随后又在JDK 20中进行了完善.现在,Java 21开始正式推出该特性优化.下面我们通过一个例子来理解这个新特性. record Po ...
- 工作中常用的一些Git骚操作,一般人我不告诉他。
一.Git提交代码 1 git pull 从服务器上拉取代码 2 git status 查看文件的状态 3 git add . 添加所有文件到暂存区 4 git commit -m "提交的 ...
- 聊聊基于Alink库的推荐系统
概述 Alink提供了一系列与推荐相关的组件,从组件使用得角度来看,需要重点关注如下三个方面: 算法选择 推荐领域有很多算法,常用的有基于物品/用户的协同过滤.ALS.FM算法等.对于不同的数据场景, ...
- 分布式事务 —— SpringCloud Alibaba Seata
Seata 简介 传统的单体应用中,业务操作使用同一条连接操作不同的数据表,一旦出现异常就可以整体回滚.随着公司的快速发展.业务需求的变化,单体应用被拆分成微服务应用,原来的单体应用被拆分成多个独立的 ...
- xshell无法调用gdc
现象: <topprod:/u1/topprod/tiptop> exe2 p_zzExecute program:p_zz<topprod:/u1/topprod/tiptop&g ...