题目说明
需要读入一个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;
}
其实这个程序很简单,但体现了对矩阵的遍历的思想。