题目意思是对 n阶方阵 打印出螺旋状的 0 吗?
题目说得不太明白,螺旋规则是什么,不知道这个对不对def spiralize(n):
"""输入矩阵规模size,打印螺旋蚊香状数列"""
a = [[1 for j in range(n)]for i in range(n)] # 建n阶方阵(二维数组)
begin,end = 0,n # 控制循环始末
x,y = 0,0 # 控制数据坐标
# 没加判断条件,所以循环一定是4的倍数才能停止
# 所以不能被4整除的偶数项n=6、10、14...中间有多余1位的会变成0,跟题目不冲突就是了
while end > begin:
# 这里 begin-1 是为了新矩阵和旧矩阵的接入口也要用 0 接起来,第一次不影响
for j in range(begin-1,end):
a[x][j] = 0
y = end-1
for i in range(begin,end):
a[i][y] = 0
x = end-1
# 这直观上应该是反着来循环,但是为方便 # for j in range(end-1,begin-1,-1):
for j in range(begin,end):
a[x][j] = 0
y = begin
# 规律是隔一行打印(begin+2 和 end-2),从第四次开始(贪吃蛇要撞到自己了)
# begin 和 end 的改变,等于循环一圈后矩阵减去了行2列
begin += 2
for i in range(begin,end):
a[i][y] = 0
x = begin
end -= 2
for k in a:
print(k)
spiralize(12)
结果是这样的[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]
[0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]
[0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0]
[0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0]
[0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0]
[0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0]
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|