题目描述: 给你一个正整数N,请你输出大小为NxN的数字漩涡。数字漩涡的定义请看下例。 N=3,则输出: 1 2 3 8 9 4 7 6 5
N = 4,则输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
注意:每行数字之间以一个空格隔开,行尾不要有多余的空格。
示例: 输入: N = 1 输出: 1
分析:
题目中的描述有些问题,数字的排版不是很对,所以我猜了一段时间。
最后发现,原来就是一个蛇形填数问题。 我不给出分析过程,有兴趣的同学可以直接尝试一下。
最后我贴出我的代码。
写的比较糟糕。仅供参考。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ans = [[0 for _ in range(N)] for i in range(N)]
pre_lst = [(0, 1), (1, 0), (0, -1), (-1, 0)]
def full(a):
global x, y, t, num
pre = pre_lst[t%4]
for i in range(a):
ans[x][y] = num
x += pre[0]
y += pre[1]
num += 1
t += 1
tn = N-1
num = 1
x, y = 0, 0
t = 0
while tn >=0:
full(tn)
full(tn)
full(tn)
full(tn)
tn -= 2
x += 1
y += 1
if N % 2:
ans[N//2][N//2] = N * N
for a in ans:
str_a = [str(_) for _ in a]
print(" ".join(str_a))