Run ID:66355
提交时间:2024-03-07 10:52:35
n = int(input()) matrix = [[0 for _ in range(0)] for _ in range(n)]#初始化N*N方阵为0 if n == 1: print(" "+str(1)) exit(0) #当n为奇数时 elif n % 2 ==1: x,y = 0,n - 1 #起始位置为右上角 matrix[x][y] = 1 #初始值填充1 dx,dy = [1,0,-1,0],[0,-1,0,1]#定义四个方向:上,下,左,右 d = 0#初始方向是向下 #从2开始填充到N*N for i in range(2,n * n + 1): next_x,next_y = x + dx[d],y + dy[d] #计算下一个填充位置 #如果 下一个位置产出方阵范围或者已经被填充,则改变方向 if not (0 <= next_x < n) or not (0 <= next_y < n) or matrix[next_x][next_y] != 0: d = (d+1) % 4 #改变方向 next_x,next_y = x +dx[d],y+dy[d] #重新计算下一个填充位置 x,y = next_x,next_y #更新当前位置 metrix[x][y] = i #填充数字 #当n为偶数时 else: x,y = 0,n-1#起始位置设置在右上角 matrix[x][y] = 1#起始位置填充1 dx,dy = [1,0,-1,0],[0,-1,0,1]#定义四个方向:下,左,上,右 d = 0#初始方向是向下 #从2开始填充N*N for i in range(2,n * n + 1): next_x,next_y = x + dx[d],y + dy[d] #计算下一个填充位置 #如果下一个位置超出方阵范围或已经被填充,则改变方向 if not (0 <= next_x < x) or not (0 <= next_y < n ) or matrix[next_x][next_y] != 0: d = (d+1) %4 #改变方向 next_x,next_y = x +dx[d],y+dy[d] #重新计算下一个填充位置 x,y = next_x,next_y #更新当前位置 matrix[x][y] = i #填充数字 for i in range(n): for j in range(n): print(matrix[i][j],end=" ") print()