好像又是一个新的原创题,好像看到没有题解,我就小试牛刀写一个题解。【轻喷】

题目内容:7-3 TicTacToe游戏--胜负判定 (15 分)

井字棋是一种在3x3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边框,格线排成井字故得名。

游戏规则:由分别代表O和X的两个游戏者轮流在格子里留下标记。由最先在任意一条直线上成功连接三个标记的一方获胜。(摘抄自百度百科)

QQ截图20210516153608.jpg

读入一个3X3的二维数组,数组元素为'X'表示下X,元素为'O'表示下O,数组元素为'.'(英文符号“点”)表示未下棋,现编写程序进行当前胜负的判断,如果X方胜,则显示"X win!",如果O方胜,则显示"O win!",如果无人获胜,则显示"No one win!"。

输入格式:

读入一个3X3的二维数组,数组元素为'X'表示下X,元素为'O'表示下O,数组元素为'.'(英文符号“点”)表示未下棋。

输出格式:

若X方胜,则显示"X win!";若O方胜,则显示"O win!";若无人获胜,则显示"No one win!"。

输入样例1:

X.O
OX.
O.X

输出样例2:

X win!

输入样例2:

O.O
XX.
X..

输出样例2:

No one win!

非常有趣的一个题目了,发现whut的mooc就喜欢原创一些游戏有关的代码,比如上周的2048。

解决思路:

1、判断同一行三个字符是否相同,只要字符数组的第i行的[i][0],[i][1],[i][2]三个相等就可以

2、判断同一列三个字符是否相同,只要字符数组第i列的[0][i],[1][i],[2][i]三个都相等就可以

3、判断斜对角,只有两种可能。

1)[0][0],[1][1],[2][2]

2)[0][2],[1][1],[2][0]

判断这两种的三个是否相等。

注意点:

1、如果有两个人连成一条直线则no one win(最后一个点过不了)

2、有可能三个相等但是是'.',虽然连成一条直线但是既不是x也不是o

上代码:

#include<stdio.h>
int main()
{
    char a[4][4];
    int i,xflag=0,oflag=0;//xflag=0代表x没赢,xflag=1代表x赢
    for(i=0;i<3;i++)//常规输入
    {
        scanf("%s",a[i]);
    }
    for(i=0;i<3;i++)//判断行是否三个相同,因此只需要在一行内看
    {
        if((a[i][0]==a[i][1])&&(a[i][1]==a[i][2])&&(a[i][0]==a[i][2]))//判断行是否三个相同
        {
            if(a[i][0]!='.')//不能是点赢
            {
                if(a[i][0]=='X')//x赢了
                    xflag=1;//x赢
                else//否则o赢
                    oflag=1;
            }
        }
    }
    for(i=0;i<3;i++)//判断列是否三个相同,因此只需要在一列内看
    {
        if((a[0][i]==a[1][i])&&(a[1][i]==a[2][i])&&(a[0][i]==a[2][i]))//判断列是否三个相同
        {
            if(a[0][i]!='.')//不能是点赢
            {
                if(a[0][i]=='X')//x赢了
                    xflag=1;//x赢
                else//否则o赢
                    oflag=1;
            }
        }
    }
    if(((a[0][0]==a[1][1])&&(a[1][1]==a[2][2])&&(a[0][0]==a[2][2]))||((a[0][2]==a[1][1])&&(a[1][1]==a[2][0])&&(a[0][2]==a[2][0])))//对角相等只有两种可能,直接检验
    {
        if(a[1][1]!='.')//不能是点赢
        {
            if(a[1][1]=='X')//x赢了
                xflag=1;//x赢
            else//否则o赢
                oflag=1;
        }
    }
    if((xflag==1)&&(oflag==0))//x赢o未赢
        printf("X win!\n");//xwin
    else if((xflag==0)&&(oflag==1))//o赢x未赢
        printf("O win!\n");//owin
    else
        printf("No one win!\n");//都没赢
    return 0;
}

谢谢!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐