题目描述
给出一个不大于 99 的正整数n,输出n*n的蛇形方阵。从左上角填上1开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用3个字符,前面使用空格补齐。
输入
输入一个正整数n,含义如题所述
输出
输出符合题目要求的蛇形矩阵
样例
输入 4
输出如下
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 |
算法思路
用二维数组来存放整个矩阵,创建变量num记录当前位置应填入的数字,num超过n^2的时候说明已全部填入,则结束循环。变量top,bottom,left,right来限制每一次遍历的边界范围。变量fx用来记录方向,从而实现层层循环的同时能不断改变遍历的方向。输出时使用f字符串格式化输出从而统一格式。
题解
n=int(input())
arr=[[0 for _ in range(n)] for _ in range(n)]
fx=0
num=1
left,right,top,bottom=0,n,0,n
while(num<=n**2):
if(fx==0):
for i in range(left,right):
arr[top][i]=num
num+=1
fx=1
top+=1
if(fx==1):
for i in range(top,bottom):
arr[i][right-1]=num
num+=1
fx=2
right-=1
if(fx==2):
for i in range(right-1,left-1,-1):
arr[bottom-1][i]=num
num+=1
fx=3
bottom-=1
if(fx==3):
for i in range(bottom-1,top-1,-1):
arr[i][left]=num
num+=1
fx=0
left+=1
for i in range(n):
for j in range(n):
print(f"{arr[i][j]:3}",end="")
print("\n",end="")