java - 确定矩阵是否是魔法矩阵

标签 java matrix multidimensional-array

我需要确定幻方是否是幻方。我需要比较每行的总和以及每列的总和,然后将它们与对角线的总和进行比较,然后与另一个矩阵的总和进行比较。

我已经计算了每行和每列的总和,包括两条对角线。

如果正方形是神奇的,我需要它返回 true (所有行、列和对角线都有相同的总和,否则为 false)

我如何设置此代码?

最佳答案

public class MatrixService {

public static boolean isMagicSquare(int[][] arr) {
    final int size = arr.length;
    final int totalSize = size * size;
    final int magicNumber = (size * size * (size * size + 1) / 2) / size;
    int sumOfRow = 0, sumOfColoumns = 0, sumOfPrimaryDiagonal = 0, sumOfSecondaryDiagonal = 0;
    boolean[] flag= new boolean[size * size];

    for (int row = 0; row < size; row++) {
        sumOfRow = 0;
        sumOfColoumns = 0;
        for (int col = 0; col < size; col++) {
            if (arr[row][col] < 1 || arr[row][col] > totalSize) {
                return false;
            }
            if (flag[arr[row][col] - 1] == true) {
                return false;
            }
            flag[arr[row][col] - 1] = true;
            sumOfRow += arr[row][col];
            sumOfColoumns += arr[col][row];
        }
        sumOfPrimaryDiagonal += arr[row][row];
        sumOfSecondaryDiagonal += arr[row][n-row-1];

        if (sumOfRow != magicNumber || sumOfColoumns != magicNumber) {
            return false;
        }

        if (sumOfPrimaryDiagonal != magicNumber || sumOfSecondaryDiagonal != magicNumber) {
            return false;
        }

        return true;
    }

    public static void main(String []args){
        int[][] a ={{4,9,2},
                {3,5,7},
                {8,1,6}};
        System.out.println(isMagicSquare(a));
   }
}

关于java - 确定矩阵是否是魔法矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257867/

相关文章:

java - 使用 Java 将 PDF 转换为 XML

java 查找并替换 %

matlab - 复制矩阵的一行或一列并将其插入下一行/列

r - 将矩阵更改为仅包含唯一数字 R 的矩阵

php - 来自字符串的多维数组

r - 创建一个函数来表征重复模拟

java - 空指针异常 : findViewById returns null in Dialog

java - 安卓暂停/恢复不工作

matlab - matlab中如何解决索引超出矩阵维度的问题?

python - 从 4D 阵列中裁剪图像的不同部分以进行数据增强