CodeForces 3C Tic-tac-toe 井字棋盘游戏

原创 2015年07月09日 10:14:41
C. Tic-tac-toe
time limit per test
1 second
memory limit per test
64 megabytes
input
standard input
output
standard output

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 × 3grid (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: firstsecondillegalthe first player wonthe second player won or draw.

Sample test(s)
input
X0X
.0.
.X.
output
second

题目大意是在3*3格子里。X先下,0后下,.代表没下棋的格。连成3个就赢了。但是有好多不合法的。
没下满时,下一个给X下就输出 first;下一个给0下就输出 second;X赢输出  the first player won;
0赢就输出  the second player won;平局 draw;不合法 illegal。
其实代码真的简单写,但是要注意不合法的情况,有点坑。
1,棋盘上不能出现X和0同时连成3个;
2,X连成3个时,0不能出现和X一样个数的棋子;
3,0连成3个时,X不能出现比0多一个棋子的情况。
注意这些就很简单。
代码如下:(大一学生,代码比较烂,很复杂)
#include <iostream>
#include <math.h>
#include <stdlib.h>

using namespace std;

int main()
{
    char a[3][3];
    for(int i=0; i<3; i++)
    {
        cin>>a[i];
    }
    int sum[2]={0};
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<3; j++)
        {
            if(a[i][j]=='X')
                sum[0]++;
            else if(a[i][j]=='0')
                sum[1]++;
        }
    }
    if(sum[0]-sum[1]>1||sum[0]-sum[1]<0)
    {
        cout<<"illegal"<<endl;
        return 0;
    }
    int f[2]= {0};
    for(int i=0; i<3; i++)
    {
        if(a[i][0]=='X'&&a[i][0]==a[i][1]&&a[i][1]==a[i][2])
            f[0]=1;
        if(a[i][0]=='0'&&a[i][0]==a[i][1]&&a[i][1]==a[i][2])
            f[1]=1;
    }
    for(int i=0; i<3; i++)
    {
        if(a[0][i]=='X'&&a[0][i]==a[1][i]&&a[1][i]==a[2][i])
            f[0]=1;
        if(a[0][i]=='0'&&a[0][i]==a[1][i]&&a[1][i]==a[2][i])
            f[1]=1;
    }
    if(a[0][2]=='X'&&a[0][2]==a[1][1]&&a[1][1]==a[2][0])
        f[0]=1;
    if(a[0][2]=='0'&&a[0][2]==a[1][1]&&a[1][1]==a[2][0])
        f[1]=1;
    if(a[2][2]=='X'&&a[2][2]==a[1][1]&&a[1][1]==a[0][0])
        f[0]=1;
    if(a[2][2]=='0'&&a[2][2]==a[1][1]&&a[1][1]==a[0][0])
        f[1]=1;
    if(f[0]==1&&f[1]==1)
    {
        cout<<"illegal"<<endl;
        return 0;
    }
    else if(f[0]==1&&f[1]!=1&&sum[0]==sum[1])
    {
        cout<<"illegal"<<endl;
        return 0;
    }
    else if(f[0]==1&&f[1]!=1&&sum[0]-sum[1]==1)
    {
        cout<<"the first player won"<<endl;
        return 0;
    }
    else if(f[1]==1&&f[0]!=1&&sum[0]-sum[1]==1)
    {
        cout<<"illegal"<<endl;
        return 0;
    }
    else if(f[1]==1&&f[0]!=1&&sum[0]-sum[1]!=1)
    {
        cout<<"the second player won"<<endl;
        return 0;
    }
    int num=sum[0]+sum[1];
    if(num==9)
    {
        cout<<"draw"<<endl;
        return 0;
    }
    else if(sum[0]==sum[1])
    {
        cout<<"first"<<endl;
        return 0;
    }
    else if(sum[0]-sum[1]==1)
    {
        cout<<"second"<<endl;
        return 0;
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Keener_Tic_Tac_Toe(井字棋游戏)代码(c语言)

遇到的问题: 1.中间有需要清楚键盘缓冲区,具体(?) 2.number char型,强制int型转换是利用ASCII码,相差48. 3.string型c++支持,c并没有,利用char型字符数...
  • LNZ001
  • LNZ001
  • 2017年01月29日 22:47
  • 609

jquery实现井字格游戏

tic-tac-toe body{ color:#FA6766; font-family:Tre...
  • zhou_yujia
  • zhou_yujia
  • 2016年06月09日 21:41
  • 550

mfc 井字游戏程序分析,描述整个程序处理过程。

左键单击画X,右键单击画O,X、O轮流画!出现三个连续的图形就是赢!或者画完所有矩形区没有输赢就是平局!(这是单人游戏还是双人游戏?例子而已) 先看程序中的数据:9个矩形和矩形状态 一个矩形三种状态...
  • jingmiaa
  • jingmiaa
  • 2016年03月02日 18:37
  • 708

C++井字棋游戏,DOS界面版

据说有一个能保证不败的算法,明天看看先再写个PVC版的。 正题,今天无聊写了个井字棋游戏,顺便逐渐让自己习惯良好的代码风格,放上来给新手学习学习。 jzq2.cpp /* N字棋游戏PVP版,DOS...
  • guang_jing
  • guang_jing
  • 2014年05月25日 00:34
  • 3343

井字棋游戏代码Java

井字棋:读入一个整数,表示井字棋棋盘的边长。判断其中是否存在某一方获胜,获胜的条件是存在整行或整列或整条对角线或整条反对角线上是相同的棋子。如果存在,则输出代表获胜一方字母:X或O(大写字母X或O);...
  • qq_32855219
  • qq_32855219
  • 2016年11月23日 22:47
  • 2263

用 Python 做个简单的井字游戏

在这个教程中,我将展示如何利用Python来做一个井字游戏。这将包括函数、列表、if语句、while循环、for循环以及错误处理等等。   首先,我们将创建两个函数,第一个函数将会打印出井字游戏...
  • walter_chan
  • walter_chan
  • 2015年01月18日 13:41
  • 449

程序员面试金典——解题总结: 9.17中等难题 17.2判断井字游戏中某个玩家是否赢了游戏

#include #include #include using namespace std; /* 问题:设计一个算法,判断玩家是否赢了井字游戏 分析:首先井字游戏是跟五子棋类似,任意连线...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2017年01月16日 00:13
  • 250

『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】

一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏。此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎。...
  • yorhomwang
  • yorhomwang
  • 2013年03月14日 22:07
  • 33265

【数字图像处理】带AI的井字棋游戏

源代码下载:http://download.csdn.net/detail/jsgaobiao/9464292 老师看了Alpha狗和李世石的比赛,一拍大腿就把作业题给改了。。。也是醉 ...
  • jsgaobiao
  • jsgaobiao
  • 2016年03月17日 13:55
  • 1999

React 实现井字棋游戏 (tic-tac-toe) 教程 (6) <译自官方文档>

你的井字棋已经实现了如下功能: 你可以玩井字棋游戏; 当有玩家获胜时,宣布结果; 存储棋局的历史步骤记录; 允许玩家穿越回之前,查看当时棋盘的格局。...
  • Beijiyang999
  • Beijiyang999
  • 2017年11月06日 16:46
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeForces 3C Tic-tac-toe 井字棋盘游戏
举报原因:
原因补充:

(最多只允许输入30个字)