思路:
每行的数是有规律的,以n=4为例,第一行的第一个数是1,第二数是1+2=3,第三个数是3+3 =6,第四个数是6+4=10,总共加了n-1次分别是range(2,n+1),第二行的第一个数是1+1=2,第二个数是2+3=5,第三个是5+4=9,总共加了n-2次,分别是range(3,n+1)。第三行第一个数是第二行第一个数加2,2+2 =4,第二个数是4+4=8,总共加n-3次为range(4,n+1),第四行第一个数是第三行第一个数加3,4+3=7,第四行没有其他数因为n-4=0。泛化成数字表示,第i行的第j个数等于第i行的前一个数加list(range(i+1,n+1))[j]。dp[i][j]=dp[i][j-1]+list(range(i+1,n+1))[j]。我们需要每一行的第一个数,dp[i][1]=dp[i-1][i]+i-1。所以第一行的第一个数必须初始化为1。为了方便迭代,我们初始化一个dp[0][1]=1,第一行的第一个数是dp[1][1]=dp[0][1]+1-1=1。其他的每个数按迭代方式更新。代码如下:
while True:
try:
n = int(input())
a = 1#初始化dp[0][1]
for i in range(1,n+1):#更新第i行的后面的数
list1 = []
a = a + i - 1
b = a
list1.append(str(a))
for i2 in range(i+1,n+1):#更新第i+1行的第一个数,为下一轮第i+1行的更新做准备
b = b + i2
list1.append(str(b))
print(' '.join(list1))
except:
break