The Algorithms logo
算法
关于我们捐赠

魔方阵

A
package com.thealgorithms.maths;

import java.util.Scanner;

/*A magic square of order n is an arrangement of distinct n^2 integers,in a square, such that the n
numbers in all rows, all columns, and both diagonals sum to the same constant. A magic square
contains the integers from 1 to n^2.*/
public final class MagicSquare {
    private MagicSquare() {
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Input a number: ");
        int num = sc.nextInt();
        if ((num % 2 == 0) || (num <= 0)) {
            System.out.print("Input number must be odd and >0");
            System.exit(0);
        }

        int[][] magicSquare = new int[num][num];

        int rowNum = num / 2;
        int colNum = num - 1;
        magicSquare[rowNum][colNum] = 1;

        for (int i = 2; i <= num * num; i++) {
            if (magicSquare[(rowNum - 1 + num) % num][(colNum + 1) % num] == 0) {
                rowNum = (rowNum - 1 + num) % num;
                colNum = (colNum + 1) % num;
            } else {
                colNum = (colNum - 1 + num) % num;
            }
            magicSquare[rowNum][colNum] = i;
        }

        // print the square
        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num; j++) {
                if (magicSquare[i][j] < 10) {
                    System.out.print(" ");
                }
                if (magicSquare[i][j] < 100) {
                    System.out.print(" ");
                }
                System.out.print(magicSquare[i][j] + " ");
            }
            System.out.println();
        }
        sc.close();
    }
}
关于此算法

魔方阵被定义为一个包含多个不同整数的正方形,这些整数的排列方式使得每一行、每一列和主对角线上的数字之和都相同,通常也包括一些或所有其他对角线。

魔方阵公式

n 阶的魔方阵是指在一个正方形中排列 个数字(通常是唯一的整数)的一种方式。所有行、列和对角线上的 n 个数字加起来都等于同一个常数。一个魔方阵包含从 1 到 的整数。每一行、每一列和对角线上的固定和被称为魔数或魔和。它用字母 M 表示。一个典型魔方阵的魔数完全取决于 n 的值。因此,魔和的值使用以下公式计算

  • M = n(n² + 1)/2

  • 这是魔方阵公式,用于制作不同阶数的魔方阵。如果我们从每个数字中减去 ( + 1),我们会得到另一个魔方阵,这被称为互补魔方阵。包含从 1 开始的连续数字的正方形通常被称为正常魔方阵。

如何解魔方阵

如上所述,魔方阵和的公式为 n(n² + 1)/2。
对于一个 3 阶魔方阵,我们需要将 n = 3 代入公式,以确定魔和,这样我们就可以轻松地构建 3×3 的魔方阵。

n = 3 时,和 = 3(3*3 + 1)/2 = 3(9 + 1)/2 = (3 × 10)/2 = 15
现在,我们需要将数字放在相应的位置上,以便每行、每列和对角线上的数字之和都等于 15。

3 阶魔方阵技巧

x 为魔方阵的阶数。

在这种情况下,x = 3

考虑另一个数字 y,使得 xy 的乘积等于魔和,即 15。

所以,y = 5 {xy = (3)(5) = 15}

y 的值应该始终位于正方形的中心,而 x 应该位于它的左侧单元格。
x 上方的单元格被视为 y – 1,如下所示

magic-square-formula magic-square-1 magic-square-2

让我们制作上面正方形的互补魔方阵。

(n² + 1) = 32 + 1 = 9 + 1 = 10

现在,从 (n² + 1) 中减去每个数字,即从 10 中减去。

  • 第一行数字

    • 10 – 4 = 6
    • 10 – 3 = 7
    • 10 – 8 = 2
  • 第二行数字

    • 10 – 9 = 1 ,
    • 10 – 5 = 5 ,
    • 10 – 1 = 9
  • 第三行数字

    • 10 – 2 = 8 ,
    • 10 – 7 = 3 ,
    • 10 – 6 = 4

magic-square-3

参考资料

网站:-

Youtube:-