2401_89115052 2025-06-18 01:10 采纳率: 37.5%
浏览 9

关于#c语言#的问题:在练如何根据棋子分布,写判断井字棋的获胜条件,3、2、1(3个一行,数字3代表空白)时,数字3代表空白)时,自己写的代码运行结果不对


C初学,在练如何根据棋子分布,写判断井字棋的获胜条件,当棋子分布为1332133213个一行,数字3代表空白)时,自己写的代码运行结果不对,显示为平局,怎么回事?
#include<stdio.h>
int main()
{
    int numA,numB;
    numA=0;
    numB=0;
    int board[3][3];
    int i=0;
    int j=0; 
    int result=0;
    printf("请输入井子棋盘分布:\n");
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            scanf("%d",&board[i][j]);}
    }

//按行遍历 
    for(i=0;i<3;i++){
        numA=0;
        numB=0;
        for(j=0;j<3;j++){
            if(board[i][j]==1){
                numA++;
            }    
            else if(board[i][j]==2){
                numB++;
            }
                if(numA==3){
                result=1;
                goto below;
            }
            else if(numB==3){
                result=2;
                goto below;
            }
        }
    }

//按列遍历 
    for(j=0;j<3;j++){
        numA=0;
        numB=0;
        for(i=0;i<3;i++){
            if(board[i][j]==1){
                numA++;
            }    
            else if(board[i][j]==2){
                numB++;
            }
                if(numA==3){
                result=1;
                goto below;
            }
                else if(numB==3){
                result=2;
                goto below;
            }
        }
    }

//对角线
for(i=0;i<3;i++){
    for(j=0;j<3;j++){
        if(board[i][i]==1){
            numA++;
        }
        else if(board[i][i]==2){
            numB++;
        }
    }
            if(numA==3){
                result=1;
                goto below;
            }
            else if(numB==3){
                result=2;
                goto below;
            }
}

for(i=0;i<3;i++){
    for(j=0;j<3;j++){
         if(board[i][3-i-1]==1){
            numA++;
        }
        else if(board[i][3-i-1]==2){
            numB++;
        }
    }
            if(numA==3){
                result=1;
                goto below;
            }
            else if(numB==3){
                result=2;
                goto below;
            }    
}


below:
    if(result==1){
        printf("A方获胜"); 
    } 
    else if(result==2){
        printf("B方获胜"); 
    }
    else if(result==0){
        printf("平局");
    }
    getchar(); 
    return 0;
}
  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-06-18 01:11
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你遇到的问题是,写了一个判断井字棋获胜条件的C语言程序,但是当棋子分布为1、3、3,2、1、3,3、2、1时,程序显示为平局,而实际上应该判定为自己获胜。

    解决方案

    问题的原因可能是你的程序没有正确地判断棋子分布是否为获胜状态。下面是一个简单的示例代码,可以帮助你解决这个问题:

    #include <stdio.h>
    
    int checkWin(int board[3][3]) {
        // 检查水平方向是否获胜
        for (int i = 0; i < 3; i++) {
            if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != 3) {
                return board[i][0];
            }
        }
    
        // 检查竖直方向是否获胜
        for (int i = 0; i < 3; i++) {
            if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != 3) {
                return board[0][i];
            }
        }
    
        // 检查对角线是否获胜
        if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != 3) {
            return board[0][0];
        }
    
        if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != 3) {
            return board[0][2];
        }
    
        // 如果上述条件都不满足,则返回0,表示平局
        return 0;
    }
    
    int main() {
        int board[3][3] = {
            {1, 3, 3},
            {2, 1, 3},
            {3, 2, 1}
        };
    
        int winner = checkWin(board);
        if (winner == 1) {
            printf("Player 1 wins!\n");
        } else if (winner == 2) {
            printf("Player 2 wins!\n");
        } else {
            printf("It's a tie!\n");
        }
    
        return 0;
    }
    

    这个示例代码中,我们定义了一个checkWin函数,它检查棋子分布是否为获胜状态。如果棋子分布满足获胜条件,则返回对应的玩家编号(1或2)。否则,返回0,表示平局。

    main函数中,我们创建了一个棋子分布数组,并将其传递给checkWin函数。如果checkWin函数返回1,则输出“Player 1 wins!”;如果返回2,则输出“Player 2 wins!”;否则,输出“It's a tie!”。

    结论

    通过上述示例代码,你可以看到,问题的原因可能是你的程序没有正确地判断棋子分布是否为获胜状态。通过检查棋子分布是否满足获胜条件,你可以解决这个问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月18日