斐波那契蛇题目
将斐波那契数列按照矩阵排列,左上角为最大元素,依次按照蛇形顺时针递减,是一个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 0elif (n == 1):return 1elif (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 +=1end -=1arr = 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()
详细解决方案
斐波那契蛇
热度:90 发布时间:2024-02-13 09:42:22.0
相关解决方案