题目描述
将斐波那契数列按照从大到小,顺时针的顺序存放在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
,输出结果如下: