Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
2016-03-11 17:52
323 查看
C. Tic-tac-toe
题目连接:
http://www.codeforces.com/contest/3/problem/CDescription
Certainly, everyone is familiar with tic-tac-toe game. The rules are very simple indeed. Two players take turns marking the cells in a 3 × 3 grid (one player always draws crosses, the other — noughts). The player who succeeds first in placing three of his marks in a horizontal, vertical or diagonal line wins, and the game is finished. The player who draws crosses goes first. If the grid is filled, but neither Xs, nor 0s form the required line, a draw is announced.You are given a 3 × 3 grid, each grid cell is empty, or occupied by a cross or a nought. You have to find the player (first or second), whose turn is next, or print one of the verdicts below:
illegal — if the given board layout can't appear during a valid game;
the first player won — if in the given board layout the first player has just won;
the second player won — if in the given board layout the second player has just won;
draw — if the given board layout has just let to a draw.
Input
The input consists of three lines, each of the lines contains characters ".", "X" or "0" (a period, a capital letter X, or a digit zero).Output
Print one of the six verdicts: first, second, illegal, the first player won, the second player won or draw.Sample Input
X0X.0.
.X.
Sample Output
secondHint
题意
就那个XO游戏,谁先画三个X或者三个O在一条直线就赢了。现在给你一个局面,让你判断这个局面是否合法,谁胜利了。
如果没人胜利,输出下一步谁走。
X先走。
题解:
模拟题,没啥好说的。就判断一下谁胜利就好了,然后剩下的瞎判一下……
代码
#include<bits/stdc++.h> using namespace std; string s[3]; int check(char c) { for(int i=0;i<3;i++) { int win = 1; for(int j=0;j<3;j++) if(s[i][j]!=c) win=0; if(win==1)return win; } for(int i=0;i<3;i++) { int win=1; for(int j=0;j<3;j++) if(s[j][i]!=c) win=0; if(win==1)return win; } if(s[0][0]==c&&s[1][1]==c&&s[2][2]==c)return 1; if(s[0][2]==c&&s[1][1]==c&&s[2][0]==c)return 1; return 0; } int main() { for(int i=0;i<3;i++) cin>>s[i]; int X=0,O=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(s[i][j]=='X')X++; else if(s[i][j]=='0')O++; int Win1 = check('X'); int Win2 = check('0'); if(Win1&&Win2)return puts("illegal"),0; if(Win1&&X-O!=1)return puts("illegal"),0; if(Win2&&X!=O)return puts("illegal"),0; if(X-O>1||O>X)return puts("illegal"),0; if(Win1)return puts("the first player won"),0; if(Win2)return puts("the second player won"),0; if(X+O==9)return puts("draw"),0; if(X==O)return puts("first"),0; if(O==X-1)return puts("second"),0; }
相关文章推荐
- 点评qq浏览器
- coreseek(sphinx)安装2(mysql数据源配置和测试)
- Javascript进阶篇——(DOM—节点---属性、访问节点)—笔记整理
- Autolayout平分多个按钮宽度
- linux内核数据结构之链表
- ibatis源码学习(四)动态SQL的实现原理
- oozie timezone时区配置
- 阿里云Centos环境搭建
- Jsp9个内置对象详解
- CString 百度百科
- offsetof与container_of宏[总结]
- Node.js项目中调用JavaScript的EJS模板库的方法
- @Autowired注入static 接口问题
- ibatis源码学习(三)参数和结果的映射原理
- Web MVC编程:The length of the string exceeds the value set on the maxJsonLength propert
- Jenkins -- 配置JENKINS_HOME
- Android调试方法及常用工具logCat的介绍
- CSAPP Lab1--Manipulating Bits
- 代理传值
- HTTP返回值