【问题标题】:Determining whether or not a matrix is magic or not判断一个矩阵是否魔法
【发布时间】:2014-12-02 19:59:08
【问题描述】:

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

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

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

我将如何设置此代码?

【问题讨论】:

  • 问题是?
  • 我不明白,你声称已经计算了所需的总和,所以你应该拥有所有必需的信息来确定平方是否是魔法。你现在面临什么问题?您只需要检查所有总和是否相同。
  • 为什么你不能做类似return ((a == b && c == d) && b == c)的事情?

标签: java matrix multidimensional-array


【解决方案1】:
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));
   }
}

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多