楼主: Martina904
644 0

[源码分享] Python [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

高中生

40%

还不是VIP/贵宾

-

威望
0
论坛币
1116 个
通用积分
29.6591
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
150 点
帖子
19
精华
0
在线时间
15 小时
注册时间
2022-10-16
最后登录
2024-1-17

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
python,实现用1到100间的全部自然数输出一个10行10列的矩阵,使得矩阵的每一行、每一列和对角线之和均相等。(单偶幻方:n*n,其中n=4*k+2, k为正整数)


def array3(k):
    import numpy as np
    c=2*k+1
    n=2*c  #n阶幻方
    max=n*n  #幻方最大值
    m=c**2  #将n阶幻方分为四个小矩阵,每个矩阵的数字个数
    d=(n,n)
    mtrx=np.ones(d,dtype=int)  #生成一个单位矩阵
    #先输入第二象限的数据
    mtrx[0,k]=1
    i=0
    j=k
    for num in range(2,m+1):
        i=i-1
        j=j+1
        if (num-1) % c==0:
            i=i+2
            j=j-1
        if i<0:
            i=2*k
        if j>2*k:
            j=0
        mtrx[i,j]=num
    print(mtrx)
    #输入第四象限的数据
    mtrx[2*k+1,3*k+1]=m+1
    i=2*k+1
    j=3*k+1
    for num in range(m+2,2*m+1):
        i=i-1
        j=j+1
        if (num-1) % c==0:
            i=i+2
            j=j-1
        if i<c:
            i=4*k+1
        if j>4*k+1:
            j=2*k+1
        mtrx[i,j]=num
    print(mtrx)
    #输入第一象限的数据
    mtrx[0,3*k+1]=2*m+1
    i=0
    j=3*k+1
    for num in range(2*m+2,3*m+1):
        i=i-1
        j=j+1
        if (num-1) % c==0:
            i=i+2
            j=j-1
        if i<0:
            i=2*k
        if j>4*k+1:
            j=2*k+1
        mtrx[i,j]=num
    print(mtrx)
    #输入第三象限的数据
    mtrx[2*k+1,k]=3*m+1
    i=2*k+1
    j=k
    for num in range(3*m+2,4*m+1):
        i=i-1
        j=j+1
        if (num-1) % c==0:
            i=i+2
            j=j-1
        if i<c:
            i=4*k+1
        if j>2*k:
            j=0
        mtrx[i,j]=num
    print(mtrx)
    #开始换格子,用切片()
    a1=mtrx[k,k:2*k].copy()
    a2=mtrx[3*k+1,k:2*k].copy()
    a3=mtrx[0:k,0:k].copy()
    a4=mtrx[2*k+1:3*k+1,0:k].copy()
    a5=mtrx[2*k-1:2*k+1,0:k].copy()
    a6=mtrx[4*k:4*k+2,0:k].copy()
    a7=mtrx[0:2*k+1,2*k+3:3*k+2].copy()
    a8=mtrx[2*k+1:4*k+2,2*k+3:3*k+2].copy()

    mtrx[3*k+1,k:2*k]=a1
    mtrx[k,k:2*k]=a2
    mtrx[2*k+1:3*k+1,0:k]=a3
    mtrx[0:k,0:k]=a4
    mtrx[4*k:4*k+2,0:k]=a5
    mtrx[2*k-1:2*k+1,0:k]=a6
    mtrx[2*k+1:4*k+2,2*k+3:3*k+2]=a7
    mtrx[0:2*k+1,2*k+3:3*k+2]=a8
    print(mtrx)

if __name__=="__main__":
    k=int(input("请输入k值:"))
    array3(k)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python import print range array Python

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 20:34