首页 > 试题广场 >

井字棋

[编程题]井字棋
  • 热度指数:9472 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。

测试样例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
import java.util.*;

public class Board {
    public boolean checkWon(int[][] board) {
        int size = board.length;
        int sum = 0;
        int i = 0;
        int j = 0;
        //检测行
        //检查每一行的个数是否为size
        for (i = 0; i < size; i++) {
            sum = 0;
            //检查每一列的个数是否为size
            for (j = 0; j < size; j++) {
                sum += board[i][j];
            }
            if (sum == size) {
                return true;
            }
        }
        //检查列
        for (i = 0; i < size; i++) {
            sum = 0;
            for (j = 0; j < size; j++) {
                sum += board[j][i];
            }
            if (sum == size) {
                return true;
            }
        }
        //检查主对角线的值
        sum = 0;
        for (i = 0; i < size; i++) {
            sum += board[i][i];
        }
        if (sum == size) {
            return true;
        }
        //检查副对角线的值
        sum = 0;
        for (i = 0; i < size; i++) {
            sum += board[i][size - 1 - i];
        }
        if (sum == size) {
            return true;
        }
        return false;
    }
}
发表于 2023-08-16 05:07:36 回复(0)
import java.util.*;

public class Board {
    public boolean checkWon(int[][] board) {
        int sum;
        int n = board.length;
        //检查行的元素和
        for (int i = 0; i < n; i++) {
            sum = 0;
            for (int j = 0; j < n; j++) {
                sum += board[i][j];
            }
            if(sum == n) {
                return true;
            }
        }
        //检查列的元素和
        for (int i = 0; i < n; i++) {
            sum = 0;
            for (int j = 0; j < n; j++) {
                sum += board[j][i];
            }
            if(sum == n) {
                return true;
            }
        }
        sum = 0;
        for (int i = 0; i < n; i++) {
            sum += board[i][i];
        }
        if(sum == n) {
            return true;
        }
        sum = 0;
        for (int i = 0; i < n; i++) {
            sum += board[i][n-1-i];
        }
        if(sum == n) {
            return true;
        }
        return false;
    }
}
发表于 2022-04-05 14:05:19 回复(0)
import java.util.*;

public class Board {
    public boolean checkWon(int[][] board) {
        int n = board.length;
        int sum = 0;
        int i = 0;
        int j = 0;
        for( i = 0;i < n;i++){
            sum = 0;
            for( j = 0;j < n;j++){
                //每行元素相加 i 先不变,j++
                sum += board[i][j];
            }
            if(sum == n){
                return true;
            }
        }
        
         for( i = 0;i < n;i++){
            sum = 0;
            for( j = 0;j < n;j++){
                //每行元素相加 j 先不变,i++
                sum += board[j][i];
            }
            if(sum == n){
                return true;
            }
        }
        //判断主对角线元素 主对角线;两个下标元素相等
         sum = 0;
         for( i = 0;i < n;i++){
              sum += board[i][i];
         }
         if(sum == n){
                return true;
            }
        //副对角线两个下标值相加为n - 1
         sum = 0;
         for( i = 0;i < n;i++){
              sum += board[i][n - 1 - i];
         }
         if(sum == n){
                return true;
            }
        return false;
    }
}

发表于 2022-04-01 17:19:10 回复(0)
大伙看看是这用例有问题吗?还是我理解出错了?
[-1, 1, 0]
[1, -1, 1]
[0, 1, -1]
左上到右下的斜角满足条件的啊,为什么预期输出为false??
发表于 2022-01-04 11:41:27 回复(1)
public boolean checkWon(int[][] board) {
        return board[0][0] + board[0][1] + board[0][2] == 3
                || board[1][0] + board[1][1] + board[1][2] == 3
                || board[2][0] + board[2][1] + board[2][2] == 3
                || board[0][0] + board[1][0] + board[2][0] == 3
                || board[0][1] + board[1][1] + board[2][1] == 3
                || board[0][2] + board[1][2] + board[2][2] == 3
                || board[0][0] + board[1][1] + board[2][2] == 3
                || board[0][2] + board[1][1] + board[2][0] == 3;
    }

发表于 2020-08-15 11:49:18 回复(0)
import java.util.*;

public class Board {
    public boolean checkWon(int[][] board) {
      boolean a=false;
      if(board[0][0]+board[1][1]+board[2][2]==3||board[0][2]+board[1][1]+board[2][0]==3) a=true;
     for(int i=0;i<3;i++) {
         if(board[i][0]+board[i][1]+board[i][2]==3||board[0][i]+board[1][i]+board[2][i]==3) a=true;
     }
        return a;
    }
}
发表于 2019-03-03 13:01:53 回复(0)