zoukankan      html  css  js  c++  java
  • Python实现:杨辉三角思路


     杨辉三角有以下几个特点 :

    1. 每个数等于它上方两数之和。
    2. 每行数字左右对称,由1开始逐渐变大。
    3. 第n行的数字有n项。
    4. 第n行数字和为2n-1
    5. 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
    6. 第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

    比起需要用到生成器的算法更好理解,也有些取巧了,可以作为一种思路



  • 相关阅读:
    spoj227 树状数组插队序列问题
    hdu2838树状数组解逆序
    hdu2642二维树状数组单点更新
    hdu1556 树状数组区间更新单点查询板子
    hdu3015树状数组 poj1990的离散化版本
    poj1990两个树状数组
    Python中面向对象和类
    Python中面向对象和类
    Python中的字典dict
    Python中的字典dict
  • 原文地址:https://www.cnblogs.com/xinin0909/p/9515000.html
Copyright © 2011-2022 走看看