橙白时光OJ 1905 杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
Input
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。
Output
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
Sample Input
2
3
Sample Output
1
1 1
1
1 1
1 2 1
- 通过观察可以开出规律,即处于杨辉三角内部的数等于其上一行与其对应的两个数的和,而三角形的两条边上全部是1。
可以通过类似矩阵生成式的方法生成一个元素全为0的三角,再向其中填入数字,如:
0
0 0
0 0 0
代码:
while 1:
n=int(input())
l=[]
for i in range(1,n+1):
l.append([0 for j in range(i)])
l[0][0]=1
for i in range(1,n):
l[i][0]=1
l[i][-1]=1
for i in range(2,n):
for j in range(1,i):
l[i][j]=l[i-1][j-1]+l[i-1][j]
for i in l:
for j in i:
print(j,end=' ')
print()
print()
- 第二种方法,利用二项式定理中的二项式系数,即组合数。
利用阶乘来定义一个组合数的函数。
杨辉三角的行数为组合数下面的数,列数即上面的数。
代码:
def C(n,m):
x=1
y=1
if m==0 or n==0:
return (1)
else:
for i in range(n-m+1,n+1):
x=x*i
for j in range(1,m+1):
y=y*j
return int((x/y))
while 1:
l=int(input())
for a in range(l):
for b in range(a+1):
print(C(a,b),end=' ')
print(end='\n')
print(end='\n')