杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

以下是杨辉三角的大概样子,n=5

昨天一直在看传智播客2018年的前端教程,昨天和今天也抽空研究了以下如何用Python实现杨辉三角。

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

前提:每行端点与结尾的数为1.

每个数等于它上方两数之和。

每行数字左右对称,由1开始逐渐变大。

第n行的数字有n项。

第n行数字和为2n-1。

第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。

第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。

每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。

(a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。

将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。

将各行数字相排列,可得11的n-1(n为行数)次方:1=11^0; 11=11^1; 121=11^2……当n>5时会不符合这一条性质,此时应把第n行的最右面的数字"1"放在个位,然后把左面的一个数字的个位对齐到十位... ...,以此类推,把空位用“0”补齐,然后把所有的数加起来,得到的数正好是11的n-1次方。以n=11为例,第十一行的数为:1,10,45,120,210,252,210,120,45,10,1,结果为 25937424601=1110。

本来无从下手,但是研究了一种Python解法终于实现:

def YangHui():

a = [1]

while True:

yield a

a = [sum(i) for i in zip([0] + a, a + [0])]

n = 0

for j in YangHui():

print(j)

n += 1

if n == 2:

break

下面,我来解释以下这段代码是什么意思:

首先,定义一个函数,然后定义一个列表,a = [1]

然后就是while循环,yield生成器就不多说了。下面的其实也不用多说,主要是这句话:

a = [sum(i) for i in zip([0] + a, a + [0])]

大家知道,sum是计算符号,而zip是打包列表的用法。但是我看了很久看不懂什么意思,直到我一步步推演:

a = [1]

a = [0,1]+[1,0] = [1,1]

a = [0,1,1]+[1,1,0]==[1,2,1]

a = [0,1,2,1]+[1,2,1,0]=[1,3,3,1]

a = [0,1,3,3,1]+[1,3,3,1,0]=[1,4,6,4,1]

这种解法非常巧妙,他利用zip打包两个数组,再利用2个0,错位相加,从而实现了杨辉三角,解题者非常聪明,而我却很笨,看了很久才明白。

python实现杨辉三角形博客园_Python实现杨辉三角相关推荐

  1. python每行输出5个数_python打印杨辉三角及输出第m行第k个数

    1.打印杨辉三角及输出第m行第k个数 1.计算到m行,打印出k项 第m行有m项,m是正整数,因此k一定不会大于m,这个需求需要保存m行的数据,那么可以使用一个嵌套结构[[],[],[]] m=int( ...

  2. python面试总结 博客园_python面试题总结

    Python语言特性 1. Python的函数参数传递 ​看两个如下例子,分析运行结果 #代码1 a = 1 def fun(a): a = 2 fun(a) print(a) #1 #代码2 a = ...

  3. python 面试题 博客园_python面试题

    1.一行代码实现1-100的和 print(sum(range(1,101))) #range中的参数是1<=i<101 #sum是计算参数的和 2.在函数内部改变全局变量 a = 5 d ...

  4. python tkinter教程 博客园_python tkinter教程-事件绑定

    一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...

  5. python读二进制文件博客园_python二进制读写文件

    基础: open(path, mode, b_buffer_size),需要指出的是第三个参数,它用来控制IO的时候是否使用缓存,这个缓存指的是python自己开辟的一片内存吧. seek(offse ...

  6. python的selenium模块博客园_Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径 2. 通过 `$PATH`环境变量找寻浏览器驱动 控制浏览器访问URL find系列函数定位元素 - `find_ ...

  7. python博客园_python模拟博客园登录-基础版

    mport time import inspect from functools import wraps user_status = {'username': None,'status': Fals ...

  8. 用python自动登录博客园

    from selenium import webdriver import timea=webdriver.Chrome()a.get("http:\\www.baidu.com" ...

  9. python杨辉三角居中_python打印杨辉三角的两种方法及详解

    艾斯压阵 1c950a7b02087bf4200394cdf1d3572c11dfcf23.jpg 一盏灯, 一片昏黄: 一简书, 一杯淡茶. 守着那一份淡定, 品读属于自己的寂寞. 保持淡定, 才能 ...

最新文章

  1. 框架模式与设计模式之区别
  2. 在ubuntu上如何将多张图片或PDF合到一个PDF上
  3. 档案盒正面标签制作_错题本科学制作方法、正确使用方式及窍门
  4. JS中比较两个对象是否相等
  5. 在fedora20下面手动为自己的安装程序创建桌面图标
  6. matlab报错随笔
  7. 集成editormd支持markdown语法(一)之基本使用
  8. 参加腾讯云TVP的Coding吐槽大会感想
  9. SAR/GMTI-概述及常用抑制杂波方法DPCA
  10. 东芝四轴机器人加相机
  11. vue单元测试SyntaxError: Unexpected token ‘export‘
  12. STM32生成bin文件
  13. 基于node实现qq空间点赞
  14. 使用LamdbaUpdateWrapper的setSql作用及风险
  15. 关于计算机的趣味小知识,10个非常有意思的趣味知识和科学事实
  16. 旗舰杀手红米K20实拍图曝光:流光外壳美炸
  17. Qt窗口设置成透明色方法(窗口设置成透明色结果显示成黑色的解决办法)
  18. 【转】canvas save restore详解(包你懂,绝对不是百度里千篇一律的教程)
  19. elementUI表格动态渲染错乱
  20. Painter下载Painter中文版下载 Substance 3D Painter最新下载和安装

热门文章

  1. 7 php 内存泄漏_PHP 内存泄漏分析定位
  2. linux中sed命令用例,Linux中使用sed命令或awk命令修改常规配置文件
  3. python中scale_Python中的Log-scale mathplotlib?
  4. python简单图画程序_用Python的Turtple画图形
  5. opencv简单的矩阵操作
  6. 计算polygon面积和判断顺逆时针方向的方法
  7. Volley学习总结
  8. error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 int __cdecl invoke_main(void)”中被引用
  9. Spring Data JPA 从入门到精通~思维导图
  10. 如何设计一个安全对外的接口