Python实现:杨辉三角思路
程序员文章站
2022-07-02 14:35:17
杨辉三角有以下几个特点 : 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n行的数字有n项。 第n行数字和为2n-1。 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。 第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。 ......
杨辉三角有以下几个特点 :
-
每个数等于它上方两数之和。
-
每行数字左右对称,由1开始逐渐变大。
-
第n行的数字有n项。
-
第n行数字和为2n-1。
-
第n行的m个数可表示为 c(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
-
第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
我的思路是由于第一行只有一个元素1,所以第二行也一定是1。所以重点在计算后面几行输出的数字,先把它输进列表。
由上图可以知道第三行 列表第一个元素[2 ] 是第2行列表第0个元素和第一个元素的和,因为第0个元素一直是1不用管它,所以有l[a]=l[a]+l[a+1],由上一行输出下一行,现在第三行
是[1,2],然后尾部加上一个[1],就可以得到第三行,列表长度也加了一个,依次类推第四行为[1,3,3],而后再加[1],输出第四行,代码实现如下
1 def yanghui(n): 2 l=[1,1] 3 for x in range(1,n): 4 for a in range(x): 5 l[a]=l[a]+l[a+1] 6 l.insert(0,1) 7 return l
后面将每一行按照格式输出即可,
再统一打印
1 x=int(input()) 2 a=1 3 b=0 4 print((x-a+1)*' ',[1]) 5 while a<x: 6 b=yanghui(a) 7 print((x-a)*' ',b) 8 a+=1
比起需要用到生成器的算法更好理解,也有些取巧了,可以作为一种思路
下一篇: java实现简单邮件的发送以及常见问题