幻方解法之错位补角法生成奇阶幻方

这段代码展示了如何通过错位补角法生成奇阶幻方。程序首先填充1到n*n的数字,然后进行横错位和竖错位操作,接着进行横补角和竖补角,以确保每个步骤后仍为有效的幻方。通过调整顺序和方向,可以生成四个不同的解决方案。
摘要由CSDN通过智能技术生成

/*

程序思想参考百度百科上"幻方法则" 2015-01-27

http://baike.baidu.com/link?url=7ynfkLYfGv4f7PtQkuH4PSn_8IFr_QFAN-Bnsk0hmd2uk6WITW7r1d8o7IQJ1IL3bNRHbpHYbVXpDAvNbyJBDK


其实在维基百科上有更全面的,搜索Magic square即可查到,可惜太英语了,有点难,留着以后看^*^


代码环境xcode6.1 playground


几个公用函数只在第一篇显示,后面的篇章不在重复

func isMagic(s:[[Int]])->[Int]?

func printMagic(s:[[Int]])

func signed(aint: Int)->Int

func correction(k: Int, step: Int) ->Int

*/


/*

四、错位补角法生成奇阶幻方

1.对于所有的奇阶幻方,1-n*n从小到大填入n*n的方格中。以n=5时,1-25为例。

     

2.横错位,将方格横向错位,每行错位数为 n-行数,即第一行横向移动n-1位,第二行横向移动n-2...直到形成一个左低右高的楼梯。

           

3.横补角,以中间行为基准,将突出的数字补回本行所缺的方格内,45补到1的前,10补到6前,16补到20后,2122补到25后。从而重新得到一个n*n方格。


4.竖错位,将方格纵向错位,每列错位数为 n-列数,即第一列横向移动n-1位,第二列横向移动n-2...直到形成一个左低右高的楼梯。

           

5.竖补角,以中间列为基准,将突出的数字补回本列所缺的方格内,1723补到4上,24补到5上,2补到21下,39补到22下。从而重新得到一个n*n方格,及得到结果。


结语:错位补角可以先横后竖,也可以先竖后横。楼梯可以左低右高,也可以左高右低。只要保证横竖做出的楼梯方向相同,就能得到正确结果。一共可以求出4个答案

*/

func JJRepair(#step: Int, #rowfirst: Bool, #maxfirst: Bool) -> ([[Int]])?{

    if (step < 3) { return nil}

    if (step % 2 == 0) { return nil}

    

    let aRow = [Int](count: step, repeatedValue: 0)

    var solution = [[Int]](count: step, repeatedValue: aRow)

    

    //1-n*n从小到大填入n*n的方格中

    var iPut = 1

    for var row = 0</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值