蛇形方阵,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
'''
