编辑代码

#include <stdio.h>

#define SIZE 3 // 假设棋盘为 3x3

// 函数:检查棋盘的行或列是否符合条件
// 参数:
// - board: 棋盘数组
// - size: 棋盘大小
// - isRow: 是否检查行(1 表示行,0 表示列)
int checkLine(int board[SIZE][SIZE], int size, int isRow) {
    for (int i = 0; i < size; i++) {
        int numOf0 = 0, numOf1 = 0;
        for (int j = 0; j < size; j++) {
            int value = isRow ? board[i][j] : board[j][i]; // 根据 isRow 决定是行还是列
            if (value == 0) numOf0++;
            else if (value == 1) numOf1++;
        }
        if (numOf0 == size) return 0; // 找到全为 0 的行或列
        if (numOf1 == size) return 1; // 找到全为 1 的行或列
    }
    return -1; // 未找到符合条件的行或列
}

int main() {
    // 示例棋盘
    int board[SIZE][SIZE];
    int i,j;
    int numOfX;
    int numOfO;
    int result = -1;

    for (i=0;i<SIZE;i++){
        for(j=0;j<SIZE;j++){
            scanf("%d",&board[i][j]);
        }
    }//读入列和行

    // 检查行和列
    result = checkLine(board, SIZE, 1); // 检查行
    if (result == -1) {
        result = checkLine(board, SIZE, 0); // 如果行未找到,则检查列
    }

    numOfO = numOfX = 0;
    for(i=0;i<SIZE;i++){
        if(board[i][i]==1){
            numOfX++;
        }else{
            numOfO++;
        }
    }

    numOfO=numOfX=0;
    for(i=0;i<SIZE;i++){
        if(board[i][SIZE-i-1]==1){
            numOfX++;
        }else{
            numOfO++;
        }
    }//对角线检查

    if(numOfO==SIZE){
        result=0;
    }else if(numOfX==SIZE){
        result=1;
    }

    // 输出结果
    if (result == 0) {
        printf("O赢了");
    } else if (result == 1) {
        printf("X赢了");
    } else {
        printf("没人赢");
    }

    return 0;
}