斐波那契蛇 — Python实现

题目描述

将斐波那契数列按照从大到小,顺时针的顺序存放在n*n的方阵中,n=3的情况如下图所示:
在这里插入图片描述

解题思路

先生成斐波那契数列的数组,让后将数组按照要求存放:

  • 存放的时候我们可以一圈一圈地存放
  • 当整个一圈遍历完了以后进行下一圈的遍历
  • 停止条件为2*圈数小于n(每遍历整个一圈少两行或两列)

代码实现

n=int(input())
def fib(n):#生成斐波那契数组
    if n==1:
        return [1]
    if n==2:
        return [1,1]
    res=[1,1]
    for i in range(2,n):
        res.append(res[i-1]+res[i-2])
    return res
def trans(res,n):#转化为要求的格式
    length=res.__len__()
    tab=[[0]*n for i in range(n)]
    layer=0
    count=0
    while 2*layer<=n:
        for c in range(layer,n-layer):
            tab[layer][c]=res[length-1-count]
            count=count+1
        for r in range(layer+1,n-layer):
            tab[r][n-layer-1]=res[length-1-count]
            count=count+1
        for c in range(n-layer-2,layer-1,-1):
            tab[n-layer-1][c]=res[length-1-count]
            count=count+1
        for r in range(n-layer-2,layer,-1):
            tab[r][layer]=res[length-1-count]
            count=count+1
        layer=layer+1
    return tab
res=trans(fib(n*n),n)
for i in range(n):
    for j in range(n):
        print(res[i][j],end=' ')
    print()

代码运行结果:
输入4,输出结果如下:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值