如何在Java中檢查矩陣是否為幻方?


矩陣不過是在二維的矩形佈局中排列的資料元素的集合。在Java中,二維陣列可以被視為矩陣。

根據問題陳述,任務是檢查矩陣是否為幻方。

如果任何行、列或對角線的元素之和等於一個特定數字,則稱該矩陣為幻方。

讓我們深入研究這篇文章,瞭解如何使用Java程式語言來實現。

向您展示一些例項

例項1

Suppose the original matrix is {
   { 13, 8, 15 },
   { 14, 12, 10 },
   { 9, 16, 11 }
}; 

這裡任何一行、任何一列或對角線的和都等於36。

在檢查幻方之後,結果索引將是

給定的矩陣是一個幻方

例項2

Suppose the original matrix is{
   { 8, 7, 6 },
   { 9, 5, 1 },
   { 5, 3, 8 }
}; 

這裡任何一行、任何一列或對角線的和都不相等。

在檢查幻方之後,結果索引將是

給定的矩陣不是一個幻方

演算法

步驟1 - 初始化並宣告矩陣

步驟2 - 宣告布林值以檢查幻方。

步驟3 - 使用迴圈查詢兩個對角線的和。

步驟4 - 使用for迴圈查詢行和列的和。

步驟5 - 檢查幻方。

步驟6 - 列印結果。

語法

要獲取陣列的長度(陣列中元素的數量),陣列有一個內建屬性,即length

下面是指其語法 -

array.length

其中,“陣列”指的是陣列引用。

多種方法

我們提供了不同方法的解決方案。

  • 透過使用矩陣的靜態初始化

  • 透過使用使用者定義的方法

讓我們逐一檢視程式及其輸出。

方法1:透過使用矩陣的靜態初始化

在這種方法中,矩陣元素將在程式中初始化。然後根據演算法檢查矩陣是否為幻方。

示例

public class Main {
   //main method
   public static void main(String[] args){
     
     //Initialising and declaring matrix
      int mat[][] = {{ 13, 8, 15 }, { 14, 12, 10 }, { 9, 16, 11 }};
      int M = 3;
      
      //declare boolean to check for magic square or not
      boolean flag = false;
      
      //Initialising and declaring the diagonal sum as 0
      int sum1 = 0,sum2=0;
      
      //finding the sum of the two diagonals i.e. sum1 and sum2
      for (int i = 0; i < M; i++){
         sum1 += mat[i][i];
         sum2 += mat[i][M-1-i];
      }
      
      //check if sum of diagonals are unequal then it is not a magic square
      if(sum1!=sum2)
      flag = true; 
      for (int i = 0; i < M; i++) {
         
         //Initialising and declaring the row sum and column sum as 0
         int rowSum = 0, colSum = 0;
         
         //finding the sum of the rows and columns i.e. row and column
         for (int j = 0; j < M; j++){
            rowSum += mat[i][j];
            colSum += mat[j][i];
         }
         
         //check if sum of rows, columns and diagonals are unequal then it is not a magic square
         if (rowSum != colSum || colSum != sum1)
            flag = true; 
      }
      
      //checking and printing magic square
      if (!flag)
         System.out.println("Given matrix is a Magic Square");
      else
         System.out.println("Given matrix is a not a magic" + " Square");
   }
} 

輸出

Given matrix is a Magic Square

方法2:透過使用使用者定義的方法

在這種方法中,矩陣元素將在程式中初始化。然後透過將矩陣作為引數傳遞來呼叫使用者定義的方法,並在方法內部根據演算法檢查矩陣是否為幻方。

示例

public class Main {
   //main method
   public static void main(String[] args){
      
      //Initialising and declaring matrix 
      int mat[][] = {{ 8, 7, 6 }, { 9, 5, 1 }, { 5, 3, 8 }};
      //calling user defined function			
      magicSquare(mat);
   }
   static int M = 3;
   
   //user defined method
   static void magicSquare(int mat[][]) {
      
      //declare boolean to check for magic square or not
      boolean flag = false;
      
      //Initialising and declaring the diagonal sum as 0
      int sum1 = 0,sum2=0;
      
      //finding the sum of the two diagonals i.e. sum1 and sum2
      for (int i = 0; i < M; i++)	{
         sum1 += mat[i][i];
         sum2 += mat[i][M-1-i];
      }
      
      //check if sum of diagonals are unequal then it is not a magic square
      if(sum1!=sum2)
      flag = true; 
      for (int i = 0; i < M; i++) {
         
         //Initialising and declaring the rows and columns sum as 0
         int rowSum = 0, colSum = 0;
         
         //finding the sum of the rows and columns i.e. row and column
         for (int j = 0; j < M; j++)	{
            rowSum += mat[i][j];
            colSum += mat[j][i];
         }
         
         //check if sum of rows, columns and diagonals are unequal then it is not a magic square
         if (rowSum != colSum || colSum != sum1)
         flag = true; 
      }
      
      //checking and printing magic square
       if (!flag)
         System.out.println("Given matrix is a Magic Square");
      else
         System.out.println("Given matrix is a not a magic" + " Square");
   }
}

輸出

Given matrix is a not a magic Square

在這篇文章中,我們探討了使用Java程式語言檢查矩陣是否為幻方的不同方法。

更新於: 2023年3月6日

4K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告