目录

什么是杨辉三角

杨辉三角解法

1. 定义法

2. 计算杨辉三角 补0法

3. 杨辉三角,对称法

4. 杨辉三角,单列表方法

5.列表嵌套(二维数组)

6. 新旧两行,一次性开辟新行

7.yield函数

8.zip函数

参考资料链接:


一、什么是杨辉三角

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

杨辉三角_百度百科

杨辉三角的性质:

每个数字等于上一行的左右两个数字之和。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和。

为了解决这个问题,并了解更多的解法,我在网上查找了一些资料,将解法进行了汇总

二、杨辉三角解法

1. 定义法

思路:

从第三行开始,每一行的首尾都是1,中间部分每个数字等于上一行的左右两个数字之和。先定义每一行的第一个数字,然后在利用规则对中间部分进行运算,最后再添加最后一个元素。

PS:这个解法还是比较容易想出来的

代码:

# 计算杨辉三角 定义法
n = eval(input("输入要打印的行数:"))
triangle = [[1], [1, 1]]
for i in range(2, n):  # 已经给出前两行,求剩余行pre = triangle[i-1]  # 上一行cul = [1]  # 定义每行第一个元素for j in range(i-1):  # 算几次cul.append(pre[j]+pre[j+1])  # 每个数字等于上一行的左右两个数字之和。cul.append(1)  # 添加每行最后一个元素triangle.append(cul)
print("普通输出:{}".format(triangle))
for i in range(n):  # 按等边三角形格式输出s = " "*(n-i-1)for j in triangle[i]:s = s + str(j)+" "print(s)

运行结果

定义法也可以使用下面这种形式,先给出一个空列表,通过循环先进行追加列表,在对列表进行修改

代码

n = eval(input())
triangle = []
for i in range(n):cur = [1]triangle.append(cur)    #先追加进去if i == 0:continuepre = triangle[i-1]for j in range(i-1):cur.append(pre[j] + pre[j+1])cur.append(1)
print(triangle)

2. 补0法

补零法是在定义法的基础上,通过对上一行加[0],那么每行只需定义每行的第一个元素,这一行的其余元素可以通过上一行的左右两个元素相加得到。值得注意的是补零只是对中间的过程变量进行补零,不影响输出结果。

代码

# 计算杨辉三角 补0法
triangle = [[1]]
n = eval(input("输入行数:"))
for i in range(1, n):swap = triangle[i-1]+[0]cul = [1]for j in range(len(swap)-1):cul.append(swap[j]+swap[j+1])triangle.append(cul)
print(triangle)

运行结果

3.对称法

思路

中点的确定:

代码:

# 杨辉三角,对称法
n = eval(input("输入要打印的行数:"))
triangle = [[1], [1, 1]]
for i in range(2, n):tmp = triangle[-1]#上一个列表cul = [1] * (i+1)for j in range(i//2): #有图知:大概的临界值为一半,再仔细推敲cul[j+1] = tmp[j]+tmp[j+1]if i != 2j:#当j不为中点时cul[-j-2] = cul[j+1]triangle.append(cul)
print(triangle)

运行结果

4. 杨辉三角,单列表方法

代码

# 杨辉三角,单列表解决
n = eval(input("输入要打印的行数:"))
row = [1] * n
for i in range(n):z = 1offset = n - ifor j in range(1, i//2+1):val = z + row[j]z = row[j]row[j] = valif i != 2*j:row[-j - offset] = valprint(row[:i+1])

运行结果

5.列表嵌套(二维数组)

概念:list1[n][m] = list1[n-1][m-1] + list1[n-1][m]

代码

n=int(input())
list1=[]
for n in range(n):row=[1] # 第一行第一列为1list1.append(row)if n==0:for num in row:  # 这里主要是为输出做的格式处理print(num,end=" ")print()continuefor m in range(1,n):row.append(list1[n-1][m-1]+list1[n-1][m])row.append(1)for num in row:print(num, end=" ")print()

这个方法利用List列表将二维数组进行实现

6. 新旧两行,一次性开辟新行

代码

m = eval(input("输入要输出的行数:"))
# 新旧两行,一次性开辟新行
ordline = []
for i in range(m):newline = [1] * (i+1)for j in range(2, i+1):newline[j-1] = oldline[j-1]+oldline[j-2]oldline = newlineprint(newline)

运行结果

其中通过计算比较,第五种方法一次性开辟内存空间的方法要比第一种方法中,每次计算通过append添加新的内存空间要快。

7.yield函数

利用yield函数可以将L定义为生成器

代码

def triangles():L = [1]              #定义L为一个只包含一个元素的列表while True:yield L          #定义为生成器函数L =[1] + [L[n] + L[n-1] for n in range(1,len(L))] + [1]n = 0
for t in triangles():print(t)n = n + 1if n == 10:break

8.zip函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

思路

杨辉三角特性:

代码

def triangles():n = [1]while True:yield nn = [x+y for x,y in zip([0] + n,n+[0])]n = 0
for t in triangles():print(t)n = n + 1if n == 10:break

运行结果

参考资料链接:

杨辉三角的几种解法(python)_vampire's blood的博客-CSDN博客_杨辉三角python

python——杨辉三角 - 我听过 - 博客园

python打印杨辉三角的两种方法及详解 - 简书

杨辉三角形(超级简单的Python实现方法)_3Sunremitting的博客-CSDN博客_python杨辉三角

Python yield 使用浅析 | 菜鸟教程

Python3 zip() 函数 | 菜鸟教程

【Python实现杨辉三角】相关推荐

  1. python杨辉三角居中_利用python打印杨辉三角

    用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...

  2. 用python打印杨辉三角

    杨辉三角的形式如下图(图片来自维基百科)所示: 用列表的形式呈现如下: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, ...

  3. python语言输入杨辉三角_?新手求教:请问怎样用python 显示杨辉三角,任意输入一个数N,输出一个N 1层的杨辉三角。...

    如何用python输出杨辉三角 iangles里用到了yield,yield 的作用就是把一个函数变成一个 generator 用python语言输出九九乘法表 杨辉三角 求代码 1.九九乘法表def ...

  4. Python打印杨辉三角-生成器语法yield的理解

    ###先看代码. def triangles():# 定义最初的数据 1 ,存到列表中lt = [1]# 进入循环while True:# 使用yield语句产生一个生成器,返回当前列表yield l ...

  5. python杨辉三角代码,python实现杨辉三角的几种方法代码实例

    方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ trian ...

  6. 用python实现杨辉三角的几种不同方式

    杨辉三角的概念 比较详细的知识可以看这里,在杨辉三角中,每个数是它左上方和右上方的数的和. 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 ...

  7. python 实现杨辉三角(依旧遗留问题)

    1 #! usr/bin/env python3 2 #-*- coding :utf-8 -*- 3 print('杨辉三角的generator') 4 def triangles(): 5 6 N ...

  8. python生成器杨辉三角_python 生成器生成杨辉三角的方法(必看)

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  9. 用python编写杨辉三角金字塔_用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔...

    分享几道简单的python打印输出的问题,本质上都是可以将其分解成一个大循环之中有几个小循环. 1.杨辉三角 主要特点: 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 每行端点与结 ...

  10. python输出杨辉三角啊二维数组_用Python输出一个杨辉三角的例子

    这篇文章主要介绍了用Python和erlang输出一个杨辉三角的例子,同时还提供了一个erlang版杨辉三角,需要的朋友可以参考下 关于杨辉三角是什么东西,右转维基百科:杨辉三角 稍微看一下直观一点的 ...

最新文章

  1. 对List中对象的去重
  2. 2016 ACM/ICPC Asia Regional Dalian Online
  3. 计算机网络管理员适用单位,计算机网络管理员软考理论复习题(附答案).(40页)-原创力文档...
  4. 机器学习数据倾斜的解决方法_机器学习并不总是解决数据问题的方法
  5. (转)Shell中获取字符串长度的七种方法
  6. 传Facebook将推出应用中心挑战谷歌搜索地位
  7. 和为给定数(信息学奥赛一本通-T1244)
  8. JAVA基础系列:Arrays.binarySearch二分查找
  9. Android socketnetty实现
  10. sas macro 入门
  11. mysql卸载不干净时,如何干净利索的卸载mysql数据库(完整版)
  12. 元宵节没用智能名片在互联网发贺卡,那就OUT了
  13. 7-12 编程实现两个分数相加
  14. ubuntu快捷复制粘贴
  15. 2023电工杯数学建模A题思路
  16. python之遍历技巧
  17. Linux内核源代码概述
  18. 病毒丨3601lpk劫持病毒分析
  19. 解放双手!无需注解快速生成API文档,跟SpringBoot绝配!
  20. 使用A*算法求迷宫最短路径问题

热门文章

  1. verilog代码编写工具
  2. 电脑摄像头测试软件在线,AMCap 摄像头测试软件使用说明
  3. 【Arc GIS 零基础教学】环境专业专题图层水系图的绘制方法
  4. CAD中 OLE不能旋转_工作常备的天正CAD技巧都在这里啦(附教程)
  5. XP桌面背景文件路径
  6. 【GIT】git 提交代码正确步骤
  7. 西门子200程序案例集
  8. BROTHER 废墨清零教学
  9. EndNoteX7中conference proceeding和conference paper的区别
  10. linux自动补全快捷键,linux常用快捷键