/*
程序思想参考百度百科上"幻方法则" 2015-01-27
其实在维基百科上有更全面的,搜索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
*/
//看了前面几篇,大家也看出来了,不管几阶,只要大于等于3,都是有解的,而且很多都是有不同的解法
//不过在需要用时再去想用哪个方法,貌似有点伤脑筋
//不如简单写成一个方法,当需要几阶时,直接就给个解
func CreateMagic(step: Int) -> ([[Int]])?{
if step < 3 { return nil}
if (step % 2 != 0){
return JJMerzirac(step: step)
}else if (step % 4 == 0){
return SOSpring1(step: step, swap00: true)
}else if (step % 2 == 0){
return DOStrachey(subMagic: JJMerzirac(step: step/2)!)
}else{
println("这里不会进来的")
return nil
}
}
//测试
func testCreateMagic(){
func testStep(step: Int){
let s = CreateMagic(step)
if let s1 = s{
printMagic(s1)
let k = isMagic(s1)
if let k1 = k{
println("这个不是幻方 k=\(k1)")
}
}else{
println("没有生成幻方 step=\(step)")
}
}
let time1 = NSDate()
for var i = 3; i<20; ++i{
println("\n\(i)阶幻方")
testStep(i)
}
let time2 = NSDate()
println("time1=\(time1)")
println("time2=\(time2)")
}
//testCreateMagic()