python 奇数阶幻方

算法原理:

(1)将1填入第一行的中间;
(2)将数字下一个数填在右上方。
    (i)出现越界。若越过第一行,则折返回最后一行。若越过最后一列,则折返回第一列。
    (ii)没越界,但右上方已有数了,此时将其填在上一个数的正下方。

python代码:

N = int(input())
list_first =[]
list_total = []
for row in range(N): #构造二维列表,全0填充
    for col in range(N):
        list_first.append(0)
    list_total.append(list_first)
    list_first=[]
list_total[0][int(N/2)]=1 #填入 1
row_forward = 0 #刚填好的数字的行
col_forward = int(N / 2) #刚填好的数字的列
for i in range(2,N*N+1):
    if row_forward -1 < 0:
        row_now = N-1 #第一行 行越界
    else:
        row_now = row_forward -1
    if col_forward +1 > N-1:
        col_now = 0 #最后一列  列越界
    else:
        col_now = col_forward +1
    if list_total[row_now][col_now] != 0: # 如果该位置不是0,则说明该位置已被填好了数字
        row_now = row_forward +1
        col_now = col_forward
    list_total[row_now][col_now]=i
    row_forward = row_now
    col_forward = col_now
for row in list_total:
    print(row)

运行结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值