用Python输出一个杨辉三角的例子
关于杨辉三角是什么东西,右转维基百科:杨辉三角
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
杨辉三角有以下几个特点:
每一项的值等于他左上角的数和右上角的数的和,如果左上角或者右上角没有数字,就按0计算。
第N层项数总比N-1层多1个
计算第N层的杨辉三角,必须知道N-1层的数字,然后将相邻2项的数字相加,就能得到下一层除了最边上2个1的所有数字。 听起来有点像递归的思想,我们不妨假设我们已经知道N-1层的数字,来计算一下N层的数字吧。
def _yanghui_trangle(n, result):
if n == 1:
return [1]
else:
return [sum(i) for i in zip([0] + result, result + [0])]
上面代码中,result表示N-1层杨辉三角的数字。实习上,我们在列表2端各补了一个0,然后计算相邻项的和,就可以直接得到结果。
def yanghui_trangle(n):
def _yanghui_trangle(n, result):
if n == 1:
return [1]
else:
return [sum(i) for i in zip([0] + result, result + [0])]
pre_result = []
for i in xrange(n):
pre_result = _yanghui_trangle(i + 1, pre_result)
yield pre_result
if __name__ == "__main__":
for line in yanghui_trangle1(5):
print line
_yanghui_trangle可以用lambda的方式简写,但是可读性感觉会变差,所以还是保持现状好了。
tips: 上面的程序并没有考虑数据格式化的问题,也就是说输出不是完美的三角形。
鉴于最近在学习erlang,补上一个erlang版本的,性能上没有测试过,不过还是要惊叹于函数式语言的表达能力:
代码如下:
-module(yanghui).
-author(lfyzjck).
-export([triangle/1]).
triangle_next(P) ->
lists:zipwith(fun(X, Y) -> X+Y end, [0|P], P ++ [0]).
triangle(1) ->
[[1]];
triangle(N) ->
L = triangle(N - 1),
[H|_] = L,
[triangle_next(H)|L].
相关推荐
-
利用python打印出菱形、三角形以及矩形的方法实例
前言 本文主要给大家介绍了关于利用python打印出菱形.三角形以及矩形的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 实例代码 #coding:utf-8 rows = int(raw_input('输入列数: ')) i = j = k = 1 #声明变量,i用于控制外层循环(图形行数),j用于控制空格的个数,k用于控制*的个数 #等腰直角三角形1 print "等腰直角三角形1" for i in range(0, rows): for k in range
-
Python极简代码实现杨辉三角示例代码
杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list 实现下列输出效果: # [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,
-
python 生成器生成杨辉三角的方法(必看)
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2*line - 1 f_list = list(range(leng+2)) #预先分配,insert初始胡会拖慢速度,最底下一行,左右也有1个空格 #全部初始化为0 for i,v in enumerate(f_list): f_list[v] = 0 ZEROLIST = f_list[:] #预
-
python实现杨辉三角思路
程序输出需要实现如下效果: [1] [1,1] [1,2,1] [1,3,3,1] ...... 方法:迭代,生成器 def triangles() L = [1] while True: yiled L L =[1] + [L[i] + L[I+1] for i in range(len(L)-1)] + [1] n = 0 for t in triangles(): print(t) n += 1 if n == 10: break 实现逻辑: 1.由于yield为生成器中断输出,所以有了第
-
Python使用matplotlib实现在坐标系中画一个矩形的方法
本文实例讲述了Python使用matplotlib实现在坐标系中画一个矩形的方法.分享给大家供大家参考.具体实现方法如下: import matplotlib.pyplot as plt from matplotlib.patches import Rectangle class Annotate(object): def __init__(self): self.ax = plt.gca() self.rect = Rectangle((0,0), 1, 1) self.x0 = None s
-
用Python输出一个杨辉三角的例子
关于杨辉三角是什么东西,右转维基百科:杨辉三角 稍微看一下直观一点的图: 复制代码 代码如下: 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 11 8 28 56 70 56 28 8 1 杨辉三角有以下几个特点: 每一项的值等于他左上角的数和右上角的数的和,如果左上角或者右上角没有数字,就按0计算.第N层项数总比N-1层多1个 计算第N层的杨辉三角,必须知道N-1层的数字,然后将相邻
-
使用python打印十行杨辉三角过程详解
杨辉三角,是二项式系数在三角形中的一种几何排列 每个数等于它上方两数之和. 每行数字左右对称,由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
-
C# 中杨辉三角的实现
C# 中杨辉三角的实现 问题描述:创建一个程序来求三角形.该程序提示用户输入数据,然后显示出杨辉三角的规律. // 输入描述:杨辉三角长,代表数值 // 程序输出:杨辉三角 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] arg
-
python实现杨辉三角的几种方法代码实例
方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ triangle = [[1], [1, 1]] # 初始化杨辉三角 n = 3 # 从第三行开始计数,逐行添加 while n <= x: for i in range(0, n-1): if i == 0: # 添加初始列表[1,1],杨辉三角每行的首位和末位必为1 triangle.append([1, 1
-
用Python生成N层的杨辉三角的实现方法
[杨辉三角简介] 杨辉三角,是二项式系数在三角形中的一种几何排列.在欧洲,这个表叫做帕斯卡三角形. [代码实现] n = eval(input("请问你想生成几层的杨辉三角呢?")) result= [] def fun(N): # 杨辉三角生成函数 if N == 1: result.append([1]) elif N == 2: result.append([1]) result.append([1,1]) else: result.append([1]) result.ap
-
C语言在屏幕上输出杨辉三角
这就是杨辉三角,也叫贾宪三角.这于我们现在的学习联系最紧密的是2项式乘方展开式的系数规律.如图,在贾宪三角中,第3行的第三个数恰好对应着两数和的平方公式依次下去. 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: ................................................. 杨辉三角的规律是:它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和. 代码如下: #include<stdio.h> #include<stdlib.h
-
java编程实现杨辉三角两种输出结果实例代码
首先展示下结果: 简介: 杨辉三角,是二项式系数在三角形中的一种几何排列.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年.杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的优美结合. 实例代码如下: package com.sxt; import java.util.Arrays; public class KeBen { p
-
C语言打印杨辉三角示例汇总
杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一.在高中的时候我们又知道,杨辉三角的任意一行都是的二项式系数,n为行数减1.也就是说任何一个数等于这个是高中的组合数.n代表行数减1,不代表列数减1.如:第五行的第三个数就为=6. 现在我们按第一种思路来写:先定义一个二维数组:a[N][N],略大于要打印的行数.再令两边的数为1,即当每行的第一个数和
随机推荐
- 深入浅析AjaxFileUpload实现单个文件的 Ajax 文件上传库
- DOS的启动过程详解分析
- 利用java操作Excel文件的方法
- IOS开发代码分享之获取启动画面图片的string
- iOS实现知乎和途家导航栏渐变的文字动画效果
- ASP.NET中文件上传下载方法集合
- js的onload事件及初始化按钮事件示例代码
- json格式数据的添加,删除及排序方法
- .NET 缓存设计的使用说明
- ASP.NET用SignalR建立浏览器和服务器的持久连接详解
- 解析C#自定义控件的制作与使用实例的详解
- 使用C#配合ArcGIS Engine进行地理信息系统开发
- python append、extend与insert的区别
- C#不可变类型深入解析
- 菜鸟蔡之Ajax复习第三篇(Ajax之无刷新登录)
- 用C语言的泛型实现交换两个变量值
- IIS启用GZIP压缩js、css无效的原因及解决方法
- 原生JS实现匀速图片轮播动画
- Javascript使用post方法提交数据实例
- Linux管理员手册(6)--登录和注销
其他
- android studio运行按钮一直灰色
- springboot设置响应超时
- C#设置窗体自动全屏
- python 裁剪图片周围的透明像素
- c# dllimport没有啊
- mybatis-plus 多对多标签
- feign组件进行参数校验
- Vue-fullpage 监听
- python 批量生成pdf 框架
- vue手机端弹出菜单功能代码
- 图像透视变换矫正python
- 分页插件不支持嵌套结果映射
- el-select 多选默认某个值已经选中并且不可以删除
- vue项目修改文件之后 会重跑项目
- vue这么给指定的router link设置高亮
- go语言遍历树形数据结构
- 微信小程序实现按钮投票百分比进度条
- 小程序中弹框挡住头部
- layui 取值 赋值 wangEditor 获
- iframe thinkPHP 跨域 session