19. 蛇形矩阵
天津科技大学第六届科技文化节算法设计大赛第19题
题目:
如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。
1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 …
…
容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第40 行第40 列的数是多少?
解题思路:
- 解法一:dir为方向标签,为0时为从右上到左下,为1时为从左下到右上,i、j为行、列下标,当i或j到达边界即为0时,dir发生变换,由此循环至i=j=39
- 解法二:通项公式,可以找到规律,每加一行,第n行第n列的值为第n-1行第n-1列的值加上(4×(行数-1))
源代码
解法一:
direction = 0 # 0代表向右,1代表向下
alist = [[1 for i in range(100)] for j in range(100)]
i,j = 0, 0
num =1
while True:
if i == 39 and j == 39:
break
while dir == 0:
j=j + 1
num =num + 1
alist[i][j]=num
while j != 0:
i = i + 1
j = j - 1
num = num + 1
alist[i][j] = num
if i == 39 and j == 39:
print(num)
break
dir = 1
while dir == 1:
i= i + 1
num = num + 1
alist[i][j] = num
while i != 0:
i = i - 1
j = j + 1
num = num + 1
alist[i][j] = num
if i == 39 and j == 39:
print(num)
break
dir = 0
for i in alist:
print(i,'\n')
解法二:
num=1
for i in range(1,41):
sum=sum+4*(i-1)
print(num)
结果
3121