问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
思路:除第一二行外,每一行第一个数和最后一个数为一,其它数等于上一行相同位置和前一个位置的两数的和
详细代码:
def main():
lis = [[1],[1,1]]
lis1 = []
num = 2
n = int(input())
while num<n:
for i in range(len(lis[num-1])):
if i ==0:
lis1.append(1)
else:
s = lis[num-1][i]+lis[num-1][i-1]
lis1.append(s)
lis1.append(1)
lis =lis+[lis1]
lis1 =[]
num +=1
for i in range(n):
for j in range(len(lis[i])):
print(lis[i][j],end=' ')
print(' ')
main()
运行结果:
4
1
1 1
1 2 1
1 3 3 1
其他大佬的简洁代码:
l1 = [[1]]
n = 1
num = int(input())
while n < num:
l1.append(list(map(lambda x, y: x + y, [0] + l1[-1], l1[-1] + [0])))
n += 1
for i in l1:
for j in i:
print(j, end=" ")
print()
该思路为:将每行前后各加上一个0,得到新的两行,每个位置的数相加,得到的就是下一行
例如:0 1 2 1
1 2 1 0
得到下一行:1 3 3 1