橙白时光OJ 1905 杨辉三角

橙白时光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. 通过观察可以开出规律,即处于杨辉三角内部的数等于其上一行与其对应的两个数的和,而三角形的两条边上全部是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()
  1. 第二种方法,利用二项式定理中的二项式系数,即组合数。
    利用阶乘来定义一个组合数的函数。
    杨辉三角的行数为组合数下面的数,列数即上面的数。
    代码:
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')

猜你喜欢

转载自blog.csdn.net/weixin_43763903/article/details/84435168