蓝桥杯之杨辉三角,python实现

题目

问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

下面给出了杨辉三角形的前4行:

1

1 1

1 2 1

1 3 3 1

给出n,输出它的前n行。

输入格式
输入包含一个数n。

输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。

代码

import math
n = input()
n = int(n)-1
j = 0
def C(n,r):
    c = n-r
    n = math.factorial(n)
    r = math.factorial(r)
    c = math.factorial(c)
    num = n/(r*c)
    return int(num)

for r in range(n+1):
    if r ==0:
        print(1,end='')
        print('\n',end='')
        continue

    else:
        while True:

            print(C(r, j),end=' ')
            j+=1
            if j>r:
                j=0
                print('\n',end='')

                break

## 分析
我们利用二项式的原理,代码中 `n = int(n)-1`就是利用了(a+b)^i的系数展开就为i+1上面的数值这个规律,所以要在最大的底数上减1。其实这样写代码是为了方便理解,第二次range函数又把那个1加回去了,是因为range函数取不到尾数,但是我们始终要知道,这个底数是要在行数的基础上减一的。
math中的factorial()函数是用来计算阶层的,这样我们就没必要再写一个递归去实现阶层的运算了。
`print("\n")`后面之所以还要加一个`end=''`是因为如果不加,那么一个print("\n")在循环里面,想大于打印了两个换行符。这样是不符合题意的。
j就是底数,底数从0一直增到第n-1
发布了23 篇原创文章 · 获赞 21 · 访问量 1387

猜你喜欢

转载自blog.csdn.net/qq_43596002/article/details/104639014