如何在 Java 中检查矩阵是否为魔方?

javaobject oriented programmingprogramming

矩阵不过是二维矩形布局中排列的数据元素的集合。在 Java 中,二维数组可视为矩阵。

根据问题陈述,任务是检查矩阵是否为魔方。

如果任何行、列或对角线元素的总和等于特定数字,则称矩阵为魔方。

让我们深入研究这篇文章,了解如何使用 Java 编程语言来实现这一点。

向您展示一些实例

实例 1

假设原始矩阵为 {
{ 13, 8, 15 },
{ 14, 12, 10 },
{ 9, 16, 11 }
};

这里任何行、任何列或对角线的总和都等于 36。

检查魔法矩阵后,结果索引将是

给定矩阵是一个魔方

实例-2

假设原始矩阵是{
{ 8, 7, 6 },
{ 9, 5, 1 },
{ 5, 3, 8 }
};

此处任何行、任何列或对角线的总和都不相等。

检查魔法矩阵后,结果索引将是

给定矩阵不是魔方

算法

步骤 1 - 初始化并声明矩阵

步骤 2 - 声明布尔值以检查魔方。

步骤 3 - 使用循环查找两个对角线的总和。

步骤 4 - 使用 for 循环查找行和列的总和。

步骤 5 - 检查魔方。

步骤 6 - 打印结果。

算法

要获取数组(该数组中的元素数),数组有一个内置属性,即length

下面是它的语法-

array.length

其中,"array"是指数组引用。

多种方法

我们以不同的方法提供了解决方案。

  • 通过使用矩阵的静态初始化

  • 通过使用用户定义的方法

让我们逐一查看程序及其输出。

方法 1:通过使用矩阵的静态初始化

在这种方法中,矩阵元素将在程序中初始化。然后根据算法检查矩阵是否为魔方。

示例

public class Main {
   //main 方法
   public static void main(String[] args){

        //初始化并声明矩阵
        int mat[][] = {{ 13, 8, 15 }, { 14, 12, 10 }, { 9, 16, 11 }};
        int M = 3;
        
        //声明布尔值以检查是否为魔方
        boolean flag = false;
        
        //初始化并将对角线和声明为 0
        int sum1 = 0,sum2=0;
        
        //求两个对角线的和,即 sum1 和 sum2
        for (int i = 0; i < M; i++){
            sum1 += mat[i][i];
            sum2 += mat[i][M-1-i];
        }
        
        //检查对角线的总和是否不相等,否则它不是魔方
        if(sum1!=sum2)
        flag = true;
        for (int i = 0; i < M; i++) {
        
        //初始化并将行和列的总和声明为 0
        int rowSum = 0, colSum = 0;
        
        //查找行和列的总和,即行和列
        for (int j = 0; j < M; j++){
            rowSum += mat[i][j];
            colSum += mat[j][i];
    	}
    
        //检查行、列和对角线的总和是否不相等,否则它不是魔方
        if (rowSum != colSum || colSum != sum1)
    		flag = true;
    }
      
      //检查并打印魔方
      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 方法
   public static void main(String[] args){
      
        //初始化并声明矩阵
        int mat[][] = {{ 8, 7, 6 }, { 9, 5, 1 }, { 5, 3, 8 }};
        //调用用户定义函数
        magicSquare(mat);
   }
   static int M = 3;
   
   //用户定义的方法
   static void magicSquare(int mat[][]) {
      
        //声明布尔值以检查是否为魔方
        boolean flag = false;
        
        //初始化并将对角线总和声明为 0
        int sum1 = 0,sum2=0;
        
        //查找两个对角线的总和,即 sum1 和 sum2
        for (int i = 0; i < M; i++) {
        sum1 += mat[i][i];
        sum2 += mat[i][M-1-i];
        }
        
        //检查对角线总和是否不相等,则它不是魔方
        if(sum1!=sum2)
        flag = true;
        for (int i = 0; i < M; i++) {
         
        //初始化并将行和列的总和声明为 0
        int rowSum = 0, colSum = 0;
        
        //查找行和列的总和,即行和列
        for (int j = 0; j < M; j++) {
            rowSum += mat[i][j];
            colSum += mat[j][i];
        }
        
        //检查行、列和对角线的总和是否不相等,否则它不是魔方
        if (rowSum != colSum || colSum != sum1)
        flag = true;
      }
      
      //检查并打印魔方
       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 编程语言检查矩阵是否为魔方的不同方法。


相关文章