题解 | #蛇形矩阵#
蛇形矩阵
http://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
# 观察题目,每一行都是差成等差数列。
# 差成等差数列通项公式:
# a2 - a1 = p
# a3 - a2 = p + q
# a4 - a3 = p + 2q
# ...
# an - an-1 = p + (n - 2)q
# 等式左右相加:
# an - a1 = (n - 1)p + [1 + 2 + ... + (n -2)]q
# = (n - 1)p + [(n - 1)(n - 2)/2]q
# an = (n - 1)p + [(n - 1)(n - 2)/2]q + a1
# 本题中每行为差成等差数列, p=(i+1), q=1,所以每行元素可以表示为(第一列元素定义bn)
# 2(n-1)+(n-1)(n-2)/2+bn
# 又每列为差成等差数列, b1=1, p=1, q=1,所以bn可以表示为
# n+(n-1)(n-2)/2
# 所以每行元素可以表示为: 2(n-1)+(n-1)(n-2)/2+n+(n-1)(n-2)/2
while True:
try:
m = int(input())
for i in range(1, m + 1): # i表示第几列
for j in range(1, m - i + 2): # j表示每列第几个元素, 第i列元素个数为m-i+1个
print(2 * (j - 1) + i + ((j - 1) * (j - 2) + (i - 1) * (i - 2)) // 2, end=' ')
print() # 每行完成后换行
except:
break