2014-12-02 19 views
1

我需要確定一個魔方是否有魔力。我需要比較每行的總和和每列的總和,然後將它們與對角線的總和進行比較,然後與另一個矩陣的總和進行比較。確定一個矩陣是否有魔力

我已經計算了每行和每列的總和,包括兩個對角線。

我需要它,如果廣場是魔法返回true(所有行,COLS和對角線具有相同的款項,否則爲false)

我將如何建立這個代碼?

+0

問題是? – 2014-12-02 20:01:13

+0

我不明白,你聲稱有計算所需的金額,所以你應該有所有必要的信息,以確定如果廣場是魔術或不。你現在面臨的問題是什麼?您只需檢查所有款項是否相同。 – Pshemo 2014-12-02 20:08:20

+0

爲什麼不能像'return((a == b && c == d)&& b == c)'那樣做? – MZimmerman6 2014-12-02 20:08:27

回答

2
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)); 
    } 
}