【C语言】三子棋.c

#include<stdio.h>


int main(){
const int size=3;
int board[size][size];
int i,j;
int numofX;
int numof0;
int result=-1;

printf("-1:没人赢,1:X赢,0:0赢。\n");
printf("请输入一个3乘3的矩阵:\n");
for(i=0;i<size;i++){
for(j=0;j<size;j++){
scanf("%d",&board[i][j]);
}
}
//检查行
for(i=0;i<size&&result==-1;i++){//i未到size以及没人赢循环继续 
numof0=numofX=0;//0和X的数量都置为0 
for(j=0;j<size;j++){
if(board[i][j]==1){//判断每行的三个元素 
numofX++;//记录1的数量 
}
else{
numof0++;//记录0的数量 
}
if(numofX==size){//1的数量为size 
result=1;//1赢 
}
else if(numof0==size){//0的数量为size 
result=0;//0赢 
}
}
}
//检查列 
if(result==-1){//没人赢继续判断 
for(j=0;j<size&&result==-1;j++)//j未到size以及没人赢循环继续 
numofX=numof0=0;
for(i=0;i<size;i++){
if(board[i][j]==1){//判断每列的三个元素 
numofX++;//记录1的数量 
}
else{
numof0++;//记录0的数量
}
}
if(numof0==size){//0的数量为size 
result=0;//0赢 
}else if(numofX==size){//1的数量为size 
result=1;//1赢 
}
}
}
//检查正对角线 
if(result==-1){//没人赢继续判断 
numofX=numof0=0;
for(i=0;i<size;i++){//i未到size
if(board[i][i]==1){//判断数组[0][0],[1][1],[2][2]的三个位置是否相同 
numofX++; //记录1的数量 
}
else{
numof0++;//记录0的数量
}
}
if(numof0==size){//0的数量为size 
result=0;//0赢 
}else if(numofX==size){//1的数量为size
result=1;//1赢 
}
}
//检查负对角线 
if(result==-1){//没人赢继续判断 
for(i=0;i<size;i++){
if(board[i][size-i-1]==1){//判断数组[2][0],[1][1],[2][0]的三个位置是否相同 
numofX++;//记录1的数量 
}else{
numof0++;//记录0的数量
}
}
if(numof0==size){//0的数量为size 
result=0;//0赢 
}else if(numofX==size){//1的数量为size
result=1;//1赢 
}
}
printf("%d",result);
return 0;
}

猜你喜欢

转载自blog.csdn.net/renjingjingya0429/article/details/80325495