斐波那契蛇

斐波那契蛇题目
将斐波那契数列按照矩阵排列,左上角为最大元素,依次按照蛇形顺时针递减,是一个n*n的矩阵,如图所示:

要求输入n,输出斐波那契蛇形矩阵

解题步骤:
主要用到递归思想,首先用动态规划方法生成斐波那契数列,然后用递归方法将斐波那契数列按照蛇形矩阵存储为二维数组,每次存储蛇形矩阵的四条外边,所求矩阵宽高依次递减2,递归生成斐波那契蛇形矩阵的二维数组,并按要求将二维数组输出为斐波那契蛇形矩阵形式。
n=4时,输出结果如下图所示:

 

n = int(input())
# abc = [int(temp) for temp in input().split()]

def fib(n):
    num = [0, 1]
    if (n == 0):
        return 0
    elif (n == 1):
        return 1
    elif (n >= 2):
        for i in range(2, n + 1):
            num.append(num[i - 1] + num[i - 2])

        return num[1:]

def handle(n,arr,start,end):

    for i in range(n):
        out[start][start + i] = arr[len(arr)-1-i]

    for i in range(1,n):
        out[start+i][end] = arr[len(arr)-n-i]

    for i in range(1,n):
        out[end][end-i] = arr[len(arr)-2*n + 1-i]

    for i in range(1,n-1):
        out[end-i][start] = arr[len(arr)-3*n + 2-i]

    if(n-2>1):
        start +=1
        end -=1
        arr = arr[0:len(arr)-(4*n-4)]
        handle(n-2,arr,start,end)
    elif(n-2==1): # 中心位置
        length = len(out[0])
        out[int(length/2)][int(length/2)] = arr[0]


arr = fib(int(n*n))
start = 0
end = n-1
out = [[0 for col in range(n)] for row in range(n)]
handle(n,arr,start,end)
print(arr,out)

for i in range(n):
    for j in range(n):
        print(out[i][j],end=' ')
    print()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值