蛇形方阵,30分悬赏
在 n×n 方陈里填入 1,2,⋯,n×n,要求填成蛇形。例如 n=4 时方阵为:10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入格式
直接输入方阵的维数,即 n 的值。(n≤100)
输出格式
输出结果是蛇形方阵。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
3
样例输出
7 8 1
6 9 2
5 4 3
求助!30分悬赏!学校作业,需及时提交!
#初始化数组 暂用列表代替 a=[] for x in range(20): b=[] for y in range(20): b.append(0) a.append(b) m=8 #行 n=9 #列 dx=[-1,0,1,0] dy=[0,1,0,-1] # dx,dy用于调整方向 x=y=0 d=1 for q in range(1,m*n+1): a[x][y]=q ax=x+dx[d] by=y+dy[d] #ax,by 记录要移动到的位置 if ax<0 or ax>=m or by<0 or by>=n or a[ax][by]: #边界处理,满足任意一种条件 即越界,需要改变方向 d=(d+1)%4 #顺时针改变方向 ax=x+dx[d] by=y+dy[d] x=ax y=by for x in range(m): for y in range(n): print("%4d"%a[x][y],end="") print() ''' PS C:\Users\Administrator> & C:/Programs/Python/python.exe d:/wp/test7.py 1 2 3 4 5 6 7 8 9 30 31 32 33 34 35 36 37 10 29 52 53 54 55 56 57 38 11 28 51 66 67 68 69 58 39 12 27 50 65 72 71 70 59 40 13 26 49 64 63 62 61 60 41 14 25 48 47 46 45 44 43 42 15 24 23 22 21 20 19 18 17 16 PS C:\Users\Administrator> '''
n = input("请输入矩阵维数:") n = int(n) if n > 0: direction = [[1, 0, -1, 0], [0, -1, 0, 1]] # 方向,下左上右 array = [[0 for i in range(n)] for j in range(n)] # 创建二维数组 row = 0 column = n-1 current_dir = 0 for i in range(n*n): # print(f"{row},{column},{i+1},{current_dir}") array[row][column] = i+1 next_row = row + direction[0][current_dir] next_column = column + direction[1][current_dir] if next_row >= n or next_column >= n or next_row < 0 or next_column < 0: current_dir = (current_dir+1) % 4 row += direction[0][current_dir] column += direction[1][current_dir] elif array[next_row][next_column] != 0: current_dir = (current_dir + 1) % 4 row += direction[0][current_dir] column += direction[1][current_dir] else: row = next_row column = next_column for i in range(n): for j in range(n): print(f"{array[i][j]}\t", end="") print("\n", end="")
#初始化数组 暂用列表代替 a=[] for x in range(20): b=[] for y in range(20): b.append(0) a.append(b) m=9 #行 n=9 #列 dx=[-1,0,1,0] dy=[0,1,0,-1] # dx,dy用于调整方向 x=0 y=n-1 d=1 for q in range(1,m*n+1): a[x][y]=q ax=x+dx[d] by=y+dy[d] #ax,by 记录要移动到的位置 if ax<0 or ax>=m or by<0 or by>=n or a[ax][by]: #边界处理,满足任意一种条件 即越界,需要改变方向 d=(d+1)%4 #顺时针改变方向 ax=x+dx[d] by=y+dy[d] x=ax y=by for x in range(m): for y in range(n): print("%4d"%a[x][y],end="") print() ''' ========================== RESTART: D:/python310/t1.py ========================= 25 26 27 28 29 30 31 32 1 24 51 52 53 54 55 56 33 2 23 50 69 70 71 72 57 34 3 22 49 68 79 80 73 58 35 4 21 48 67 78 81 74 59 36 5 20 47 66 77 76 75 60 37 6 19 46 65 64 63 62 61 38 7 18 45 44 43 42 41 40 39 8 17 16 15 14 13 12 11 10 9 '''