我需要确定幻方是否是幻方。我需要比较每行的总和以及每列的总和,然后将它们与对角线的总和进行比较,然后与另一个矩阵的总和进行比较。
我已经计算了每行和每列的总和,包括两条对角线。
如果正方形是神奇的,我需要它返回 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/