幻方解法之Spring法生成双偶幻方

/*

程序思想参考百度百科上"幻方法则" 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

*/

/*

1Spring法生成双偶幻方:

方法就是两句话:顺序填数,以中心点对称互换数字。

n阶双偶幻方表示为4m阶幻方。将n阶幻方看作一个矩阵,记为A,其中的第ij列方格内的数字记为a(i,j)

第一步,先令a(i,j)=(i-1)*n+j,即第一行从左到右可分别填写123……n;即第二行从左到可分别填写n+1n+2n+3……2n…………n^2n的平方】。

简单地说,就是1放在幻方的任意一个角格,然后按同一个方向按顺序依次填写其余数。

8阶幻方为例,顺序填数。如下所示:

1 2 3 4 5 6 7 8

9 10 11 12 13 14 15 16

17 18 19 20 21 22 23 24

25 26 27 28 29 30 31 32

33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48

49 50 51 52 53 54 55 56

57 58 59 60 61 62 63 64

等等等等,共有8种方法。(以下我只以一种为例讲解。其余方法相同)

第二步,进行对称交换。

对称交换的方法有两种:

方法一;将左上区域i+j为偶数的与幻方内以中心点为对称点的右下角对角数字进行交换;将右上区域i+j为奇数的与幻方内以中心点为对称点的左下角对角数字进行交换。(保证不同时为奇或偶即可。)

64 2 62 4 5 59 7 57

9 55 11 53 52 14 50 16

48 18 46 20 21 43 23 41

25 39 27 37 36 30 34 32

33 31 35 29 28 38 26 40

24 42 22 44 45 19 47 17

49 15 51 13 12 54 10 56

8 58 6 60 61 3 63 1

或,

1 63 3 61 60 6 58 8

56 10 54 12 13 51 15 49

17 47 19 45 44 22 42 24

40 26 38 28 29 35 31 33

32 34 30 36 37 27 39 25

41 23 43 21 20 46 18 48

16 50 14 52 53 11 55 9

57 7 59 5 4 62 2 64

完成幻方,幻和值260

*/

/*

swap00true 表示要交换第一个数,即左上区域i+j为偶数的 和右上区域i+j为奇数的

对应第一种交换

否则对应第二种交换

至于题中说的1放在不同角格,不同方向以至于有8种方法,其实都是对称的,下面仅做第一格的情况

*/

func SOSpring1(#step:Int, #swap00: Bool)->([[Int]])?{

    if (step < 3) {return nil}

    if (step % 4 != 0) {return nil}

    

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

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

    

    //第一步,先令a(i,j)=(i-1)*n+j

    var iPut = 1

    for var row = 0; row < step; ++row{

        for var col = 0; col < step; ++col{

            solution[row][col] = iPut++

        }

    }

    

    //row,col上的值与中心对称上的数字交换

    func swap(inout s:[[Int]], #row: Int, #col:Int){

        let step = s.count

        let swaprow = step - row - 1;

        let swapcol = step - col - 1;

        let tmp = s[row][col]

        s[row][col] = s[swaprow][swapcol]

        s[swaprow][swapcol] = tmp

    }

    

    if swap00{

        //左上区域i+j为偶数的

        for var row = 0; row < step/2; ++row{

            for var col = 0; col < step/2; ++col{

                if (row + col) % 2 == 0{

                    swap(&solution, row: row, col: col)

                }

            }

        }

        //右上区域i+j为奇数的

        for var row = 0; row < step/2; ++row{

            for var col = step/2; col < step; ++col{

                if (row + col) % 2 != 0{

                    swap(&solution, row: row, col: col)

                }

            }

        }


    }else{

        //左上区域i+j为奇数的

        for var row = 0; row < step/2; ++row{

            for var col = 0; col < step/2; ++col{

                if (row + col) % 2 != 0{

                    swap(&solution, row: row, col: col)

                }

            }

        }

        //右上区域i+j为偶数的

        for var row = 0; row < step/2; ++row{

            for var col = step/2; col < step; ++col{

                if (row + col) % 2 == 0{

                    swap(&solution, row: row, col: col)

                }

            }

        }


        

    }

    

    return solution

}



//测试过程

func testSOSpring1(){

    func testAStep(#step:Int, #swap00: Bool){

        let s = SOSpring1(step: step, swap00: swap00)

        if let s1 = s{

            printMagic(s1)

            let k = isMagic(s1)

            if let k1 = k{

                println("这个不是幻方 k=\(k1)")

            }

            

        }else{

            println("s is not a magic square step = \(step)")

        }

    }

    

    testAStep(step: 4,swap00: true)

    testAStep(step: 4,swap00: false)

    testAStep(step: 8,swap00: true)

    testAStep(step: 8,swap00: false)

    testAStep(step: 12,swap00: true)

    testAStep(step: 12,swap00: false)

    testAStep(step: 16,swap00: true)

    testAStep(step: 16,swap00: false)


}

//testSOSpring1()//打开即可打印

/*

[16, 2, 3, 13]

[5, 11, 10, 8]

[9, 7, 6, 12]

[4, 14, 15, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 15, 14, 4]

[12, 6, 7, 9]

[8, 10, 11, 5]

[13, 3, 2, 16]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[64, 2, 62, 4, 5, 59, 7, 57]

[9, 55, 11, 53, 52, 14, 50, 16]

[48, 18, 46, 20, 21, 43, 23, 41]

[25, 39, 27, 37, 36, 30, 34, 32]

[33, 31, 35, 29, 28, 38, 26, 40]

[24, 42, 22, 44, 45, 19, 47, 17]

[49, 15, 51, 13, 12, 54, 10, 56]

[8, 58, 6, 60, 61, 3, 63, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 63, 3, 61, 60, 6, 58, 8]

[56, 10, 54, 12, 13, 51, 15, 49]

[17, 47, 19, 45, 44, 22, 42, 24]

[40, 26, 38, 28, 29, 35, 31, 33]

[32, 34, 30, 36, 37, 27, 39, 25]

[41, 23, 43, 21, 20, 46, 18, 48]

[16, 50, 14, 52, 53, 11, 55, 9]

[57, 7, 59, 5, 4, 62, 2, 64]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[144, 2, 142, 4, 140, 6, 7, 137, 9, 135, 11, 133]

[13, 131, 15, 129, 17, 127, 126, 20, 124, 22, 122, 24]

[120, 26, 118, 28, 116, 30, 31, 113, 33, 111, 35, 109]

[37, 107, 39, 105, 41, 103, 102, 44, 100, 46, 98, 48]

[96, 50, 94, 52, 92, 54, 55, 89, 57, 87, 59, 85]

[61, 83, 63, 81, 65, 79, 78, 68, 76, 70, 74, 72]

[73, 71, 75, 69, 77, 67, 66, 80, 64, 82, 62, 84]

[60, 86, 58, 88, 56, 90, 91, 53, 93, 51, 95, 49]

[97, 47, 99, 45, 101, 43, 42, 104, 40, 106, 38, 108]

[36, 110, 34, 112, 32, 114, 115, 29, 117, 27, 119, 25]

[121, 23, 123, 21, 125, 19, 18, 128, 16, 130, 14, 132]

[12, 134, 10, 136, 8, 138, 139, 5, 141, 3, 143, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 143, 3, 141, 5, 139, 138, 8, 136, 10, 134, 12]

[132, 14, 130, 16, 128, 18, 19, 125, 21, 123, 23, 121]

[25, 119, 27, 117, 29, 115, 114, 32, 112, 34, 110, 36]

[108, 38, 106, 40, 104, 42, 43, 101, 45, 99, 47, 97]

[49, 95, 51, 93, 53, 91, 90, 56, 88, 58, 86, 60]

[84, 62, 82, 64, 80, 66, 67, 77, 69, 75, 71, 73]

[72, 74, 70, 76, 68, 78, 79, 65, 81, 63, 83, 61]

[85, 59, 87, 57, 89, 55, 54, 92, 52, 94, 50, 96]

[48, 98, 46, 100, 44, 102, 103, 41, 105, 39, 107, 37]

[109, 35, 111, 33, 113, 31, 30, 116, 28, 118, 26, 120]

[24, 122, 22, 124, 20, 126, 127, 17, 129, 15, 131, 13]

[133, 11, 135, 9, 137, 7, 6, 140, 4, 142, 2, 144]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[256, 2, 254, 4, 252, 6, 250, 8, 9, 247, 11, 245, 13, 243, 15, 241]

[17, 239, 19, 237, 21, 235, 23, 233, 232, 26, 230, 28, 228, 30, 226, 32]

[224, 34, 222, 36, 220, 38, 218, 40, 41, 215, 43, 213, 45, 211, 47, 209]

[49, 207, 51, 205, 53, 203, 55, 201, 200, 58, 198, 60, 196, 62, 194, 64]

[192, 66, 190, 68, 188, 70, 186, 72, 73, 183, 75, 181, 77, 179, 79, 177]

[81, 175, 83, 173, 85, 171, 87, 169, 168, 90, 166, 92, 164, 94, 162, 96]

[160, 98, 158, 100, 156, 102, 154, 104, 105, 151, 107, 149, 109, 147, 111, 145]

[113, 143, 115, 141, 117, 139, 119, 137, 136, 122, 134, 124, 132, 126, 130, 128]

[129, 127, 131, 125, 133, 123, 135, 121, 120, 138, 118, 140, 116, 142, 114, 144]

[112, 146, 110, 148, 108, 150, 106, 152, 153, 103, 155, 101, 157, 99, 159, 97]

[161, 95, 163, 93, 165, 91, 167, 89, 88, 170, 86, 172, 84, 174, 82, 176]

[80, 178, 78, 180, 76, 182, 74, 184, 185, 71, 187, 69, 189, 67, 191, 65]

[193, 63, 195, 61, 197, 59, 199, 57, 56, 202, 54, 204, 52, 206, 50, 208]

[48, 210, 46, 212, 44, 214, 42, 216, 217, 39, 219, 37, 221, 35, 223, 33]

[225, 31, 227, 29, 229, 27, 231, 25, 24, 234, 22, 236, 20, 238, 18, 240]

[16, 242, 14, 244, 12, 246, 10, 248, 249, 7, 251, 5, 253, 3, 255, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 255, 3, 253, 5, 251, 7, 249, 248, 10, 246, 12, 244, 14, 242, 16]

[240, 18, 238, 20, 236, 22, 234, 24, 25, 231, 27, 229, 29, 227, 31, 225]

[33, 223, 35, 221, 37, 219, 39, 217, 216, 42, 214, 44, 212, 46, 210, 48]

[208, 50, 206, 52, 204, 54, 202, 56, 57, 199, 59, 197, 61, 195, 63, 193]

[65, 191, 67, 189, 69, 187, 71, 185, 184, 74, 182, 76, 180, 78, 178, 80]

[176, 82, 174, 84, 172, 86, 170, 88, 89, 167, 91, 165, 93, 163, 95, 161]

[97, 159, 99, 157, 101, 155, 103, 153, 152, 106, 150, 108, 148, 110, 146, 112]

[144, 114, 142, 116, 140, 118, 138, 120, 121, 135, 123, 133, 125, 131, 127, 129]

[128, 130, 126, 132, 124, 134, 122, 136, 137, 119, 139, 117, 141, 115, 143, 113]

[145, 111, 147, 109, 149, 107, 151, 105, 104, 154, 102, 156, 100, 158, 98, 160]

[96, 162, 94, 164, 92, 166, 90, 168, 169, 87, 171, 85, 173, 83, 175, 81]

[177, 79, 179, 77, 181, 75, 183, 73, 72, 186, 70, 188, 68, 190, 66, 192]

[64, 194, 62, 196, 60, 198, 58, 200, 201, 55, 203, 53, 205, 51, 207, 49]

[209, 47, 211, 45, 213, 43, 215, 41, 40, 218, 38, 220, 36, 222, 34, 224]

[32, 226, 30, 228, 28, 230, 26, 232, 233, 23, 235, 21, 237, 19, 239, 17]

[241, 15, 243, 13, 245, 11, 247, 9, 8, 250, 6, 252, 4, 254, 2, 256]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

*/





/*

方法二;将幻方等分成m*m4阶幻方,将各4阶幻方中对角线上(或非对角线上)的方格内数字与n阶幻方内以中心点为对称点的对角数字进行交换。

下图为将各4阶幻方中对角线上的方格内数字与n阶幻方内以中心点为对称点的对角数字进行交换,完成幻方,幻和值260

64 2 3 61 60 6 7 57

9 55 54 12 13 51 50 16

17 47 46 20 21 43 42 24

40 26 27 37 36 30 31 33

32 34 35 29 28 38 39 25

41 23 22 44 45 19 18 48

49 15 14 52 53 11 10 56

8 58 59 5 4 62 63 1

下图为将各4阶幻方中非对角线上的方格内数字与n阶幻方内以中心点为对称点的对角数字进行交换,完成幻方,幻和值260

1 63 62 4 5 59 58 8

56 10 11 53 52 14 15 49

48 18 19 45 44 22 23 41

25 39 38 28 29 35 34 32

33 31 30 36 37 27 26 40

24 42 43 21 20 46 47 17

16 50 51 13 12 54 55 9

57 7 6 60 61 3 2 64

*/

/*

swap00true 将各4阶幻方中对角线上的方格内数字与n阶幻方内以中心点为对称点的对角数字进行交换

对应第一种交换

否则对应第二种交换

*/

func SOSpring2(#step:Int, #swap00: Bool)->([[Int]])?{

    if (step < 3) {return nil}

    if (step % 4 != 0) {return nil}

    

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

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

    

    //第一步,先令a(i,j)=(i-1)*n+j

    var iPut = 1

    for var row = 0; row < step; ++row{

        for var col = 0; col < step; ++col{

            solution[row][col] = iPut++

        }

    }

    

    //row,col上的值与中心对称上的数字交换

    func swap_11(inout s:[[Int]], #row: Int, #col:Int){

        let step = s.count

        let swaprow = step - row - 1;

        let swapcol = step - col - 1;

        

//        println("row:\(row) col:\(col) swaprow:\(swaprow) swapcol:\(swapcol)")

        let tmp = s[row][col]

        s[row][col] = s[swaprow][swapcol]

        s[swaprow][swapcol] = tmp

//        println("s[\(row)][\(col)]=\(s[row][col]) s[\(swaprow)][\(swapcol)]=\(s[swaprow][swapcol])")

    }

    

    //将幻方等分成m*m4阶幻方

    let m_4 = step / 4

    

    //交换m*m4阶幻方中得第i4阶幻方

    func swap_44(inout s:[[Int]], #m_4_i: Int, #endRow: Int, #swap00: Bool){

//    println("m_4_i=\(m_4_i)")

        if swap00{

            //将这个4阶幻方中对角线上的方格内数字与n阶幻方内以中心点为对称点的对角数字进行交换

            //00,11,22,33,03,12,21,30对角线

            for var row = 0; row < endRow; ++row{

                let swaprow = row + m_4_i/m_4 * 4

                var swapcol1 = row + m_4_i * 4

                swapcol1 = correction(swapcol1, step)

                var swapcol2 = (m_4_i + 1) * 4 - row - 1

                swapcol2 = correction(swapcol2, step)

                

                swap_11(&solution, row: swaprow, col: swapcol1)

                swap_11(&solution, row: swaprow, col: swapcol2)

            }

        }else{

            //将这个4阶幻方中对角线上的方格内数字与n阶幻方内以中心点为对称点的对角数字进行交换

            //01,02,10,13,20,23,31,32非对角线

            for var row = 0; row < endRow; ++row{

                let swaprow = row + m_4_i/m_4 * 4

                var swapcol1 = -1

                var swapcol2 = -1

                if (row == 0 || row == 3){

                    swapcol1 = 1 + m_4_i * 4  //01  31

                    swapcol1 = correction(swapcol1, step)

                    swapcol2 = swapcol1 + 1   //02  32

                    //  swapcol2 = correction(swapcol2, step)

                }else{

                    swapcol1 = correction(m_4_i * 4,step)  //10  13

                    swapcol2 = swapcol1 + 3 //20  23

                }

                

                swap_11(&solution, row: swaprow, col: swapcol1)

                swap_11(&solution, row: swaprow, col: swapcol2)

                

            }

        }


    }

    

    

    for var m_4_i = 0; m_4_i < (m_4*m_4)/2; ++m_4_i{

        swap_44(&solution, m_4_i: m_4_i, endRow: 4, swap00: swap00)

    }

    

    //如果m_4是奇数的话,那么中心的4阶是还没交换的

    if (m_4 % 2 != 0){

        swap_44(&solution, m_4_i: m_4*m_4/2, endRow: 2, swap00: swap00)

    }

    

    return solution

}



//测试过程

func testSOSpring2(){

    func testAStep(#step:Int, #swap00: Bool){

        let s = SOSpring2(step: step, swap00: swap00)

        if let s1 = s{

            printMagic(s1)

            let k = isMagic(s1)

            if let k1 = k{

                println("这个不是幻方 k=\(k1)")

            }

            

        }else{

            println("s is not a magic square step = \(step)")

        }

    }

    

    testAStep(step: 4,swap00: true)

    testAStep(step: 4,swap00: false)

    testAStep(step: 8,swap00: true)

    testAStep(step: 8,swap00: false)

    testAStep(step: 12,swap00: true)

    testAStep(step: 12,swap00: false)

    testAStep(step: 16,swap00: true)

    testAStep(step: 16,swap00: false)

    

}

//testSOSpring2()//打开即可打印

/*

[16, 2, 3, 13]

[5, 11, 10, 8]

[9, 7, 6, 12]

[4, 14, 15, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 15, 14, 4]

[12, 6, 7, 9]

[8, 10, 11, 5]

[13, 3, 2, 16]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[64, 2, 3, 61, 60, 6, 7, 57]

[9, 55, 54, 12, 13, 51, 50, 16]

[17, 47, 46, 20, 21, 43, 42, 24]

[40, 26, 27, 37, 36, 30, 31, 33]

[32, 34, 35, 29, 28, 38, 39, 25]

[41, 23, 22, 44, 45, 19, 18, 48]

[49, 15, 14, 52, 53, 11, 10, 56]

[8, 58, 59, 5, 4, 62, 63, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 63, 62, 4, 5, 59, 58, 8]

[56, 10, 11, 53, 52, 14, 15, 49]

[48, 18, 19, 45, 44, 22, 23, 41]

[25, 39, 38, 28, 29, 35, 34, 32]

[33, 31, 30, 36, 37, 27, 26, 40]

[24, 42, 43, 21, 20, 46, 47, 17]

[16, 50, 51, 13, 12, 54, 55, 9]

[57, 7, 6, 60, 61, 3, 2, 64]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[144, 2, 3, 141, 140, 6, 7, 137, 136, 10, 11, 133]

[13, 131, 130, 16, 17, 127, 126, 20, 21, 123, 122, 24]

[25, 119, 118, 28, 29, 115, 114, 32, 33, 111, 110, 36]

[108, 38, 39, 105, 104, 42, 43, 101, 100, 46, 47, 97]

[96, 50, 51, 93, 92, 54, 55, 89, 88, 58, 59, 85]

[61, 83, 82, 64, 65, 79, 78, 68, 69, 75, 74, 72]

[73, 71, 70, 76, 77, 67, 66, 80, 81, 63, 62, 84]

[60, 86, 87, 57, 56, 90, 91, 53, 52, 94, 95, 49]

[48, 98, 99, 45, 44, 102, 103, 41, 40, 106, 107, 37]

[109, 35, 34, 112, 113, 31, 30, 116, 117, 27, 26, 120]

[121, 23, 22, 124, 125, 19, 18, 128, 129, 15, 14, 132]

[12, 134, 135, 9, 8, 138, 139, 5, 4, 142, 143, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 143, 142, 4, 5, 139, 138, 8, 9, 135, 134, 12]

[132, 14, 15, 129, 128, 18, 19, 125, 124, 22, 23, 121]

[120, 26, 27, 117, 116, 30, 31, 113, 112, 34, 35, 109]

[37, 107, 106, 40, 41, 103, 102, 44, 45, 99, 98, 48]

[49, 95, 94, 52, 53, 91, 90, 56, 57, 87, 86, 60]

[84, 62, 63, 81, 80, 66, 67, 77, 76, 70, 71, 73]

[72, 74, 75, 69, 68, 78, 79, 65, 64, 82, 83, 61]

[85, 59, 58, 88, 89, 55, 54, 92, 93, 51, 50, 96]

[97, 47, 46, 100, 101, 43, 42, 104, 105, 39, 38, 108]

[36, 110, 111, 33, 32, 114, 115, 29, 28, 118, 119, 25]

[24, 122, 123, 21, 20, 126, 127, 17, 16, 130, 131, 13]

[133, 11, 10, 136, 137, 7, 6, 140, 141, 3, 2, 144]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[256, 2, 3, 253, 252, 6, 7, 249, 248, 10, 11, 245, 244, 14, 15, 241]

[17, 239, 238, 20, 21, 235, 234, 24, 25, 231, 230, 28, 29, 227, 226, 32]

[33, 223, 222, 36, 37, 219, 218, 40, 41, 215, 214, 44, 45, 211, 210, 48]

[208, 50, 51, 205, 204, 54, 55, 201, 200, 58, 59, 197, 196, 62, 63, 193]

[192, 66, 67, 189, 188, 70, 71, 185, 184, 74, 75, 181, 180, 78, 79, 177]

[81, 175, 174, 84, 85, 171, 170, 88, 89, 167, 166, 92, 93, 163, 162, 96]

[97, 159, 158, 100, 101, 155, 154, 104, 105, 151, 150, 108, 109, 147, 146, 112]

[144, 114, 115, 141, 140, 118, 119, 137, 136, 122, 123, 133, 132, 126, 127, 129]

[128, 130, 131, 125, 124, 134, 135, 121, 120, 138, 139, 117, 116, 142, 143, 113]

[145, 111, 110, 148, 149, 107, 106, 152, 153, 103, 102, 156, 157, 99, 98, 160]

[161, 95, 94, 164, 165, 91, 90, 168, 169, 87, 86, 172, 173, 83, 82, 176]

[80, 178, 179, 77, 76, 182, 183, 73, 72, 186, 187, 69, 68, 190, 191, 65]

[64, 194, 195, 61, 60, 198, 199, 57, 56, 202, 203, 53, 52, 206, 207, 49]

[209, 47, 46, 212, 213, 43, 42, 216, 217, 39, 38, 220, 221, 35, 34, 224]

[225, 31, 30, 228, 229, 27, 26, 232, 233, 23, 22, 236, 237, 19, 18, 240]

[16, 242, 243, 13, 12, 246, 247, 9, 8, 250, 251, 5, 4, 254, 255, 1]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

[1, 255, 254, 4, 5, 251, 250, 8, 9, 247, 246, 12, 13, 243, 242, 16]

[240, 18, 19, 237, 236, 22, 23, 233, 232, 26, 27, 229, 228, 30, 31, 225]

[224, 34, 35, 221, 220, 38, 39, 217, 216, 42, 43, 213, 212, 46, 47, 209]

[49, 207, 206, 52, 53, 203, 202, 56, 57, 199, 198, 60, 61, 195, 194, 64]

[65, 191, 190, 68, 69, 187, 186, 72, 73, 183, 182, 76, 77, 179, 178, 80]

[176, 82, 83, 173, 172, 86, 87, 169, 168, 90, 91, 165, 164, 94, 95, 161]

[160, 98, 99, 157, 156, 102, 103, 153, 152, 106, 107, 149, 148, 110, 111, 145]

[113, 143, 142, 116, 117, 139, 138, 120, 121, 135, 134, 124, 125, 131, 130, 128]

[129, 127, 126, 132, 133, 123, 122, 136, 137, 119, 118, 140, 141, 115, 114, 144]

[112, 146, 147, 109, 108, 150, 151, 105, 104, 154, 155, 101, 100, 158, 159, 97]

[96, 162, 163, 93, 92, 166, 167, 89, 88, 170, 171, 85, 84, 174, 175, 81]

[177, 79, 78, 180, 181, 75, 74, 184, 185, 71, 70, 188, 189, 67, 66, 192]

[193, 63, 62, 196, 197, 59, 58, 200, 201, 55, 54, 204, 205, 51, 50, 208]

[48, 210, 211, 45, 44, 214, 215, 41, 40, 218, 219, 37, 36, 222, 223, 33]

[32, 226, 227, 29, 28, 230, 231, 25, 24, 234, 235, 21, 20, 238, 239, 17]

[241, 15, 14, 244, 245, 11, 10, 248, 249, 7, 6, 252, 253, 3, 2, 256]

经检查,行的和都是相等的

经检查,列的和都是相等的

经检查,左对角线的和都是相等的

经检查,右对角线的和都是相等的

*/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值