Python完成杨辉三角

请编写程序,显示杨辉三角形。

输入格式

行数(正整数,不超过22)

输出格式

显示指定行数的杨辉三角形

输入样例1

1

结尾无空行

输出样例2

1

结尾无空行

输入样例2

6

结尾无空行

输出样例2

               1
            1     1
         1     2     1
      1     3     3     1
   1     4     6     4     1
1     5    10    10     5     1

结尾无空行

输入样例3

15

结尾无空行

输出样例3

                                          1
                                       1     1
                                    1     2     1
                                 1     3     3     1
                              1     4     6     4     1
                           1     5    10    10     5     1
                        1     6    15    20    15     6     1
                     1     7    21    35    35    21     7     1
                  1     8    28    56    70    56    28     8     1
               1     9    36    84   126   126    84    36     9     1
            1    10    45   120   210   252   210   120    45    10     1
         1    11    55   165   330   462   462   330   165    55    11     1
      1    12    66   220   495   792   924   792   495   220    66    12     1
   1    13    78   286   715  1287  1716  1716  1287   715   286    78    13     1
1    14    91   364  1001  2002  3003  3432  3003  2002  1001   364    91    14     1

结尾无空行

提示:

  • 每一行的末尾都没有多余的空格;
  • 最末一行最左端的 1 前面无空格。

 分析

 我们从上面样例发现,杨辉三角的每行行首与每行结尾的数都为1.而且,每个数等于其左上及其右上二数的和

杨辉三角代码实现的递推公式

在很多题目中,我们常常需要用打表的形式先处理出杨辉三角矩阵,然后再以此为基础进行程序求解。那么我们打表的时候如果手存表格的话,不仅浪费考试时间,而且保证不了空间范围和正确性,这个时候需要我们使用递推的手段用程序处理出表格。

根据杨辉三角的性质,我们推出以下的递推公式:

C[i][j]=C[i−1][j]+C[i−1][j−1];(这也就以为这我们可能需要一个二维数组或者列表

 话不多说,让我们直接来看代码吧

​​​​n=int(input())
x=[]//初始化列表
c=0
for i in range(n)://控制每一行(大循环)
    print(" "*3*(n-i-1),end='')//根据规律发现题目要求的格式,即第一个数字的位置
    a=[1]
    x.append(a)//第一个数字为“1”
    for j in range(1,i):
        a.append(x[i-1][j-1]+x[i-1][j])//依次往列表后加上杨辉三角数
    a.append(1)//记得最后一位是“1”
    if i==0://把第一行单独拿出来输出,毕竟每一行列表里前后都有“1”
        print("%d"%1)
        continue
    c=len(a)//计算列表内元素个数
    b=list(map(int,a))//将元素转变为int类型
    for k in range(c):
        if k==0:
            print(b[k],end='')
            continue
        print("%6d"%b[k],end='')
    print()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值