tic-tac-toe游戏胜方判别(井字棋)(一)

题目说明
需要读入一个3x3矩阵,矩阵中1表示X,0表示O,如果有三个连在一起的相同符号,则该方获胜,如果没有,则没有获胜方。
解决方法
为了解决这个问题,需要做的是对整个矩阵进行遍历,看是否存在上述情况。为了达到目的,需要从行、列和对角线三个维度进行遍历。
程序实现

#include <stdio.h>
#include <math.h>
int main()
{
    const int size = 3;
    int board[size][size];
    int i, j;
    int numofO = 0, numofX = 0;
    int res = -1;  //-1表示没人赢,1表示X赢,0表示O赢
    
    //1 0 1   0 1 0
    //0 1 0   1 1 0
    //0 1 1   1 0 1
    //棋盘初始化
    for(i=0;i<size;i++)
    {
        for(j=0;j<size;j++)
        {
            board[i][j] = 0;
        }
    }
    //读入棋盘的值
    for(i=0;i<size;i++)
    {
        for(j=0;j<size;j++)
        {
            scanf("%d",&board[i][j]);
        }
    }
    
    //检查行
    for(i=0;i<size && res == -1;i++)
    {
        numofX = numofO = 0;
        for(j=0;j<size;j++)
        {
            if(board[i][j] == 0)
            {
                numofO++;
            }
            else
            {
                numofX++;
            }
        }
        if( numofO == size )
        {
            res = 0;
        }
        if( numofX == size )
        {
            res = 1;
        }
    }
    
    //检查列
    if(res == -1)
    {
        for(j=0;j<size && res == -1;j++)
        {
            numofX = numofO = 0;
            for(i=0;i<size;i++)
            {
                if(board[i][j] == 0)
                {
                    numofO++;
                }
                else
                {
                    numofX++;
                }
            }
            if( numofO == size )
            {
                res = 0;
            }
            if( numofX == size )
            {
                res = 1;
            }
        }
    }
    //检查对角线
    if(res == -1)
    {
        numofX = numofO = 0;
        for(i=0;i<size;i++)
        {
            if(board[i][i] == 1)
            {
                numofX++;
            }
            else
            {
                numofO++;
            }
        }
        if( numofO == size )
            {
                res = 0;
            }
            if( numofX == size )
            {
                res = 1;
            }
    }
    if(res == -1)
    {
        numofX = numofO = 0;
        for(i=0;i<size;i++)
        {
            if(board[i][size-1-i] == 1)
            {
                numofX++;
            }
            else
            {
                numofO++;
            }
        }
        if( numofO == size )
            {
                res = 0;
            }
            if( numofX == size )
            {
                res = 1;
            }
    }
    printf("1表示X赢,0表示O赢,判断结果为:%d\n",res);
    return res;
}

在这里插入图片描述在这里插入图片描述
其实这个程序很简单,但体现了对矩阵的遍历的思想。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值