填充上三角
方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。
填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。
【样例输入】
5
【样例输出】
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
n = int(input())
s=[[0 for i in range(n)]for i in range(n)]
num=1
for i in range(n):
for j in range(i,n-2*i-1):#给行赋值
s[i][j]=num
num+=1
for j in range(i,n-2*i-1):#给对角线赋值
s[j][n-i-j-1]=num
num+=1
for j in range(i,n-2*i-1):#给列赋值
s[n-i-j-1][i]=num
num+=1
if (n-1)%3==0:
s[(n-1)//3][(n-1)//3]=num#有的数最中间会只有一个数而不是一个圈,所以不在赋值范围内故需要特殊照顾
for i in range(n):
for j in range(n):
if s[i][j]!=0:
print('{:>4d}'.format(s[i][j]),end='')
print()