[题目]
在n * n 的方阵里填入1,2,3.....n * n,要求填成蛇形. 要求 n<=8
[输出]
例如: n=4 时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
[分析]
用一个2维数组来存储这个方阵。
先从方阵的右上角开始填写 1 ,每个数据都有一个坐标 (x,y), 改变坐标,使得数据可以分布在不同的位置。
就像是一条方形的螺旋线从外面绕到里面,数字就依次分布在这条看不见的螺旋线上。
实际上,就是关于(x,y)坐标的变化问题。 每次遇到边缘转向,或者遇到已经填好的数据时也要转向.
1<= n <=8
[运行结果]
[代码]
def app(n):
if n==1:
print(1)
else:
aa = [[0 for i in range(n)] for j in range(n)]
xid, yid = 0, (n-1) # 起点
i=1
for a in range(n*n):
aa[xid][yid] = i
while xid+1 xid+=1
i+=1
aa[xid][yid] = i
while yid-1>=0 and aa[xid][yid-1]==0:
yid-=1
i+=1
aa[xid][yid] = i
while xid-1>=0 and aa[xid-1][yid]==0:
xid-=1
i+=1
aa[xid][yid] = i
while yid+1 yid+=1
i+=1
aa[xid][yid] = i
for line in aa:
for a in line:
print("{:<5d}".format(a), end="")
print(' ')
if __name__=="__main__":
while True:
n = int(input("Please input number n:"))
if n>8 or n<1:
break
else:
app(n)
网友评论