[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 ...
随机推荐
- torch-1 tensor & optim
开个新坑, pytorch源码阅读-从python代码开始读起. torch/ 1.tensor.py 继承自torch._C._TensorBase , 包括各种操作,TODO:随后看cpp代码 _ ...
- Mac m2使用实现微信小程序抓包
Mac m2使用实现微信小程序抓包 最近换了MacBook Pro,芯片是M2 Pro,很多东西跟windows是不一样的,所以重新配置相应环境,这里介绍一下微信小程序抓包的方法. 使用burp+pr ...
- 实现WebRTC群聊会议室(Mesh方案)
近期需要做一个类似会议室功能,但网络上大多数是一对一通信,故记录分享希望帮助到有用的人 WebRTC一对一聊天原理 关于WebRTC建立一对一聊天的模板网上很多,可参考以下博客:springboot+ ...
- 从零开始:Spring Security Oauth2 讲解及实战
OAuth2.0的四种授权模式: https://blog.csdn.net/weixin_30849403/article/details/101958273 1.授权服务配置: 配置一个授权服务, ...
- 【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
前言 缘由 博友的需求就是我最大的动力 博友一说话,本狗笑哈哈.博友要我写啥,我就写啥. 特来一篇关于SpringBoot接口返回结果及异常统一处理,虽说封不封装都能用,但咱后端也得给前端小姐姐留个好 ...
- 【python爬虫】爬虫所需要的爬虫代理ip是什么?
前言 在进行爬虫程序开发时,经常会遇到访问被限制的网站,这时就需要使用代理 IP 来进行访问.本文将介绍代理 IP 的概念及使用方法,帮助读者更好地应对爬虫程序中的访问限制问题.同时,本文还将提供一些 ...
- Blackmail
Blackmail Arthur Hailey The chief house officer, Ogilvie, who had declared he would appear at the Cr ...
- 文心一言 VS 讯飞星火 VS chatgpt (111)-- 算法导论10.2 2题
二.用go语言,用一个单链表 L实现一个栈.要求操作 PUSH和 POP 的运行时间仍为 O(1). 文心一言: 在 Go 语言中,我们可以用结构体来实现一个单链表,然后再用栈的相关操作. 以下是一个 ...
- 17.1 隐藏执行CMD命令
本章内容涉及使用Socket API和CMD命令行工具实现本地CMD命令执行.无管道正向CMD和无管道反向CMD三种功能.执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程,并 ...
- Rust学习 | Rustlings通关记录与题解
2023年6月19日决定对rust做一个重新的梳理,整理今年4月份做完的rustlings,根据自己的理解来写一份题解,记录在此. 周折很久,因为中途经历了推免的各种麻烦事,以及选择数据库作为未来研究 ...