[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 ...
随机推荐
- 《Redis核心技术与实战》学习笔记总结目录
1 Redis学习路径 去年我学习了极客时间的<Redis核心技术与实战>课程,在这门课程的学习中,我经常看到一位课代表的发言,他就是Kaito,他总结了一份Redis学习路径脑图(建议收 ...
- 音视频FAQ(一):视频直播卡顿
一.摘要 本文介绍了视频直播卡顿的四个主要原因,用户网络问题.用户设备性能问题.技术路线的选择和实现问题.因本文主要阐述视频直播的卡顿,故技术路线的实现指的是:CDN供应商的实现问题,包含CDN性能不 ...
- pycharm+anaconda的关联
Pycharm+anaconda的关联 关联好处:Pycharm和anaconda关联后,pycharm可以直接调用anaconda中已安装好的模块,而anaconda里安装和卸载模块都比较方便. 关 ...
- 9、Mybatis之动态SQL
9.1.环境搭建 9.1.1.创建新module 创建名为mybatis_dynamicSQL的新module,过程参考5.1节 9.1.2.创建Emp实体类 package org.rain.myb ...
- KIOPTRIX: LEVEL 1.1 (#2) 常规命令注入+内核提权
0×02 Vulnhub靶机渗透总结之 KIOPTRIX: LEVEL 1.1 (#2) 系列专栏:Vulnhub靶机渗透系列 欢迎大佬:点赞️收藏关注 首发时间: 2023年8月20日 如有错误 还 ...
- API接口设计规范
说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢? 下面我们 ...
- 算法笔记_python
目录 算法 概念 时间复杂度 空间复杂度 递归原理 顺序查找 二分查找 列表排序 LowB 三人组 冒泡排序 选择排序 插入排序 NB三人组 快速排序 堆排序 归并排序 NB三人组小结 总结 其他排序 ...
- skynet的timer似乎有问题
skynet.timeout 传进去 number 范围内的数值但是会溢出, 调查发现 skynet.timeout 调用的是 c 的方法: c.intcommand("TIMEOUT&qu ...
- 【ChatGPT-应用篇】基于chatGPT覆盖测试过程的初步探索
1.前言 22年底ChatGPT就已风靡行业内外,简单来说,它是基于自然语言生成式 AI 模型,打造的一款聊天机器人.是 OpenAI 于 11 月 30 日推出的最新作品,供公众免费测试.他可以根据 ...
- Web3.0时代的全新合作模式:DAO
你有没有遇到这种情况:我有一个很棒的想法,想要开发出一个"改变世界"的项目,但是我既没有技术,也没有人脉,甚至没有资金,导致我始终没有办法开始行动,痛苦万分.就比如在黑客大赛上,我 ...