奇数阶矩阵,横竖斜加起来都相等:
给定奇数N,形成N阶矩阵,使得横竖斜加起来都相等。比如N=3:
08 01 06
03 05 07
04 09 02
每一行,每一列,交叉斜加起来都等于15
算法思路分析过程:
一、暴力解法:循环+递归实现全排列组合。此法思路简单,网上不少代码实现的,但是缺点也是很明显的,暴力愚蠢耗资源。
二、排列加上数学分析:
1、∵横竖斜之和全相等,∴每行每列之和=全数字之和/n。如果n=3,和=(1+2+3+……+9)/3=45/3=15。
2、又∵横竖斜之和全相等,推测出中心位置(x=n/2,y=n/2)的数字,为1-N^2的中心数字。比如N=3,坐标(1,1)位置的数字最可能是5。
三、罗伯法幻方(正解)
幻方是一种广为流传的数学游戏,据说早在大禹治水时就发现过。幻方的特点是:由自然数构成n×n正方形阵列,称为n阶幻方,每一行、每一列、两对角线上的数之和相等。法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。下表就是一个用罗伯法排好的5阶幻方。
罗伯法的具体方法如下:
把1(或最小的数)放在第一行正中;
按以下规律排列剩下的n2-1个数:
1)每一个数放在前一个数的右上一格;
2)如果这个数所要放的格已经超出了顶行