题解 | #蛇形矩阵#

蛇形矩阵

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
全部评论

相关推荐

11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
评论
5
2
分享
牛客网
牛客企业服务