幻方构造方法及C语言实现

所谓幻方,就是在一个nXn的正方形中,分别填上1到n*n的数字,使得每行每列以及对角线上的数字之和相等。比如,小学学过的九宫格就属于3阶幻方。幻方最早起源于中国。

对于幻方的求解,首先我们按照其阶数n(即一个边上有多少个格子)将其分为奇阶幻方和偶阶幻方,然后偶阶幻方又分为单偶幻方和双偶幻方。

 

奇阶幻方解法

奇阶幻方最简单的解法就是“罗伯法”,又称“楼梯法”。

具体步骤为:首先在第一行正中间的格子填1,然后就像走楼梯一样将2、3…n的数字依次填入右上角。这时可能会出现一个情况,就是超出了幻方的格子范围,当我们一直往右上角填的时候,如果是行超出了就行数加n,如果是列数超出了就列数减n,以保证数字始终在范围内。当填完1到n之后,开始填n+1到2*n。首先将n+1填到n的下面一格,然后再按走楼梯的方式填入n+2到2*n。如果中途出现超出范围的情况,同样按之前的方法处理。然后开始填2*n+1到3*n,首先将2*n+1填到2*n的下面一格,之后的都按之前的规律类推。

具体我们看下面的这个5阶幻方的例子:

首先,将第一行正中间填入1,然后2填在1的右上角。这时会发现,此时1的右上角超出格子了,我们可以将每列和每行看作一个环状。比如,第四列是一个连通的环,第四列第一个格子在向上走一格就到了第四列的最后一个格子,此时,这里填入2。然后2的右上角填入3,然后3的右上角填入4(同样的道理可将第三行看作环,那么4就填入了第三行的第一个格子),4的右上角填入5。这样就填完了前n个数,接下来我们填接下来的n个数,6直接填在5的下面一格,然后7填在6的右上角,8填在7的右上角,9填在8的右上角,10填在9的右上角。然后接下来的n个数也是如此,将11填在10的正下面,12填在11的右上角,剩下的依此类推。

 

双偶幻方解法

所谓双偶幻方即阶数n为4的倍数的幻方,这里用到的方法叫做“对称交换法”。

首先将1到n*n的数字,按行优先的顺序依次填满整个矩阵。

接下来将整个幻方完全划分

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值