自学Python:神奇的魔方阵

作者: 小强聊成长 | 来源:发表于2022-02-15 13:14 被阅读0次

先看下图是一个神奇的魔方阵

魔方阵

这个魔方的神奇之处在于,横向,纵向,斜对角5个数字之和都是65。

你可以验证:

第一行元素之和:17+24+1+8+15=65

第一列元素之和:17+23+4+10+11=65

主对角线上元素之和:17+5+13+21+9=65

现在我们是已知结果,如果没有这个结果,如何找出这些数字并实现这个排列。

下面直接上代码:

########################

def array(n):

    if n % 2 == 0:  # n是偶数,则加1使其变为奇数

        n = n + 1

    max = n * n

    mtrx = [1] * max

    mtrx[n // 2] = 1 # 将1存入数组

    i = 0  # 自然数1所在行

    j = n // 2  # 自然数1所在列

    for num in range(2, max + 1):# 从2开始确定每个数的存放位置

        i = i - 1

        j = j + 1

        if (num - 1) % n == 0:# 当前数是n的倍数

            i = i + 2

            j = j - 1

        if i < 0: # 当前数在第0行

            i = n - 1

        if j > n - 1: # 当前数在最后一列,即n-1列

            j = 0

        no = i * n + j  # 找到当前数在数组中存放的位置

        mtrx[no] = num

    print("生成的%d-魔方阵为:" %n, end="")# 打印生成的魔方阵

    no = 0

    for i in range(0, n):

        print()

        for j in range(0, n):

            print("%3d" %mtrx[no], end=" ")

            no += 1

    print()

if __name__ == "__main__":

    n = int(input("请输入n值:"))

    array(n)  # 调用array()函数

########################

执行结果如下:

请输入n值:5

生成的5-魔方阵为:

17  24  1  8  15

23  5  7  14  16

  4  6  13  20  22

10  12  19  21  3

11  18  25  2  9

请输入n值:3

生成的3-魔方阵为:

  8  1  6

  3  5  7

  4  9  2

________________END______________

相关文章

网友评论

    本文标题:自学Python:神奇的魔方阵

    本文链接:https://www.haomeiwen.com/subject/djsjhrtx.html