1
我需要確定一個魔方是否有魔力。我需要比較每行的總和和每列的總和,然後將它們與對角線的總和進行比較,然後與另一個矩陣的總和進行比較。確定一個矩陣是否有魔力
我已經計算了每行和每列的總和,包括兩個對角線。
我需要它,如果廣場是魔法返回true(所有行,COLS和對角線具有相同的款項,否則爲false)
我將如何建立這個代碼?
我需要確定一個魔方是否有魔力。我需要比較每行的總和和每列的總和,然後將它們與對角線的總和進行比較,然後與另一個矩陣的總和進行比較。確定一個矩陣是否有魔力
我已經計算了每行和每列的總和,包括兩個對角線。
我需要它,如果廣場是魔法返回true(所有行,COLS和對角線具有相同的款項,否則爲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));
}
}
問題是? – 2014-12-02 20:01:13
我不明白,你聲稱有計算所需的金額,所以你應該有所有必要的信息,以確定如果廣場是魔術或不。你現在面臨的問題是什麼?您只需檢查所有款項是否相同。 – Pshemo 2014-12-02 20:08:20
爲什麼不能像'return((a == b && c == d)&& b == c)'那樣做? – MZimmerman6 2014-12-02 20:08:27