简单聊几句昨天说的编程解六角幻方
首先我们容易得到每行的和的值,
(1 2 3 ... 19)÷5=38
然后先遍历一下三个数的和等于38的情况
i=0
for a in range(1,20):
for b in range(a 1,20):
for c in range(b 1,20):
if a b c==38:
i=i 1
print('(',i,')',a,b,c)
不考虑排列顺序,可以得到有280组。
同理可以得到四个数的组合有147组,五个数的组合有238组。在这里这些数据暂时没什么用。
本想着,取两组三个的、两组四个的和一组五个的,即可组合一种可能,然后再判断是否正确。但实际去编写的时候却有些难以操作,可能性太多。单就取两组三个数时就可能数量大增,这还不包括相同一组数字不同顺序的组合。
退一步再来看,先求出外围一圈的组合。
指定某一顶点为起点,先确定三个数组合,再加两个,再加两个,一圈下来最后验证下与起点合拢的组合,凑齐一圈的组合。

再向内圈一步,只需遍历内圈第一个数即可,因为内圈其他数和中心点数皆可以由这个数和外圈数依次推出,逐一判断是否正确。(注意,需要判断推出的数是否大于等于0,是否已使用过。)

结果是否唯一呢?(六角幻方解唯一),我们所说的结果是指编程确定外圈某一点为起点的结果,首先六个定点任一作为起点的话,都一样的,其次顺时针转逆时针转也是一样的,所以计算机输出的结果是12种。

以上是小朋友都很容易理解的逻辑,一main到底,只有判断if和循环for。
还有别的好方法吗?什么样的数据结构比较好?看网上还有什么线性代数的解法,高斯消元法解方程组的解法,等等。欢迎私信教教我。
,
















