具有未知魔法常数的 3x3 幻方(总和)

3x3 magic square with unknown magic constant (sum)

我正在尝试填充 3x3 矩阵(正方形)中的缺失字段以形成幻方(行、列和对角线总和相同,填充任何 none 重复正整数)。 这种正方形的一个例子是:

[_ _  _]
[_ _ 18]
[_ 28 _]

因为它不遵循普通幻方的基本规则,其整数限制为 1-9(从 1 到 n^2)。 , 魔法常数 (sum) 不等于 15 (n(n^2+1)/2) 而不是它是未知的并且有许多可能的值。

我尝试了一种非常天真的方法,我在空白字段中生成任意最大值为 99 的随机数,然后我将整个正方形传递给一个函数,该函数检查它是否是一个有效的幻方。

它基本上会一直运行下去,直到找到正确位置的数字组合。

不用说,这个解决方案很愚蠢,它会持续运行数小时才能找到答案。

我也考虑过进行详尽的数字生成(基本上尝试每一种数字组合)直到找到正确的数字,但这面临同样的问题。

所以我需要帮助找出一种算法或某种方法来限制生成的随机数的范围

一种可能的方法是将给定的数字转换为其他值。简单的除法是不可能的,但你可以用 (N-13)/5 翻译。然后你有一个部分填充的正方形:

- - -                                  2 7 6
- - 1   for which there is a solution  9 5 1
- 3 -                                  4 3 8

When you translate these numbers back with (N*5)+13, you obtain:

23 48 43
58 38 18    which sums up to 114 in all directions (5 * 15) + (3 * 13)
33 28 53

3 x 3 幻方是一个向量 space 具有以下三个基本元素:

1  1  1      0  1 -1     -1  1  0
1  1  1     -1  0  1      1  0 -1
1  1  1      1 -1  0      0 -1  1

您可以引入 3 个变量 a、b、c,分别表示 3 个基本元素的贡献,并根据您的部分解为它们写出方程。

例如,给定您的示例网格,您将拥有:

a + b - c = 18
a - b - c = 28

立即给出 2b = 10 或 b=-5。而 a-c = 23,或 c=a-23.

space 的解决方案如下所示:

23    2a-28 a+5
2a-18 a     18
a-5   28    2a-23

您可以看到每个 row/column/diagonal 加起来等于 3a。

现在您只需要为 a 和 c 找到满足正向和非重复约束的整数解。

例如,a=100、b=-5、c=77 给出:

23  172 105
182 100 18
95  28  177

a=15出现正整数元素的最小和魔方,和为3a=45。

23   2  20
12  15  18
10  28   7

正好这里没有重复。如果有,我们只需尝试 a 的下一个较大值,依此类推。