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

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

1.计算到m行,打印出k项

第m行有m项,m是正整数,因此k一定不会大于m,这个需求需要保存m行的数据,那么可以使用一个嵌套结构[[],[],[]]

m=int(input('行>>>'))

k=int(input('第几个数>>>'))

triangle=[]

for i in range(m):

row=[1] #所有行都以1开头

triangle.append(row)

if i==0:

continue

for j in range(1,i):

row.append(triangle[i-1][j-1]+triangle[i-1][j])

row.append(1)

#print("--------------------------------") #可以间隔开

print(triangle)

#print("--------------------------------")

print("第%d行第%d个数为:%d"%(m,k,triangle[m-1][k-1]))

输出结果:

行>>>5

第几个数>>>4

[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]

第5行第4个数为:4

2.m行k列的值,C(m-1,k-1)组合数

组合数方式:根据杨辉三角的定理,第n行的m个数(m>0且n>0)可表示为C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数

组合数公式:有m个不同的元素,任意取n(n≤m)个元素,记作C(m,n),则C(m,n)=m!/(n!(m-n)!) =C(m,m-n)

m = int(input('行>>>'))

k = int(input('列>>>')) # 则C(n,r)=C(m-1,k-1)=(m-1)!/((k-1)!(m-r)!)= n!/(r!(n-r)!)

n = m - 1

r = k - 1

d = n - r

targets = [] #r, n-r, n

factorial = 1 #可以加入k为1或m的判断,返回1

for i in range(1,n+1):

factorial *= i

if i == r:

targets.append(factorial)

if i == d:

targets.append(factorial)

if i == n:

targets.append(factorial)

print(targets[2]//(targets[0]*targets[1]))

输出结果:

行>>>5

列>>>4

4

2.只打印杨辉三角

1.基本方法:下一行是上一行所有元素两两相加得到,两端再添加上1

n = int(input('>>'))

tiangle=[[1],[1,1]] #预先定义前两行

for i in range(2,n):

per=tiangle[i -1]

cur = [1] #创建新行,首位为1

for j in range(i-1): #循环添加中间值

cur.append(per[j]+per[j+1])

cur.append(1) #末位添加1

tiangle.append(cur)

print(tiangle) #将新生成的行添加到总列表

输出结果:

5

[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]

2.对称法 :一次性开辟出空间,先算出前一半的值,然后对称赋值

一次性开辟出第n行所需空间然后算值替换,比循环迭代append添加更高效。每次只推算一半,时间复杂度更低

n = int(input('>>'))

triangle = [[1],[1,1]]

for i in range(2,n):

row = [1]*(i + 1) #打印第n行先创建出n个元素列表

pre = triangle[i - 1]

for j in range(i//2): #推算该行前一半的值

val = pre[j] + pre[j + 1]

row[j + 1] = val

row[ - j - 2] = val #对称赋值

triangle.append(row)

print(triangle)

输出结果:

5

[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]

3.单行覆盖:在上面对称法的基础上降低空间复杂度

一次性开辟好n个长度的空间,每次推算新行时不生成新的列表,在原来的基础上赋值替换。

n = int(input('>>'))

row = [1]*n #一次性开辟空间

for i in range(n):

z = 1

for j in range(i//2):

val = z +row[j+1] #计算出来的新值会影响后面的计算,使用临时变量置换一下

z = row[j+1]

row[j+1]=val

row[i-j-1]=val #对称赋值 row[j+1]=row[i-j-1]

print(i,end='\t')

print(row[:i+1]) #最后在总列表中截取当前计算的行长度打印出来

输出结果:

5

0 [1]

1 [1, 1]

2 [1, 2, 1]

3 [1, 3, 3, 1]

4 [1, 4, 6, 4, 1]

标签:triangle,python,行第,print,range,杨辉三角,targets,append,row

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无法识别的属性“targetFramework”。请注意属性名称区分大小写。

asp.net部署出错(targetFramework无法识别) 今天尝试着部署了一个基于Framework4.0的web项目,途中发生了一点小小的意外。报的错误是Web.Config配置文件中的 targetFramework属性无法识别。后来查了一下发现在站点中部署的Web使用的是基于.Net Framework2.0的Applic…

java解析xml生成表格_JAVA读取XML文件并解析 以及 JAVA生成文本文件输出

废话不多说,直接上代码及说明吧!package Dao;import java.io.File;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import…

.NET点滴:说说Middleware构造中获取不到Scoped服务的问题

今天小桂问我:“为什么中间件的构造函数里不能使用scope的生命周期类型啊?”,那就用实例来得到答案吧,先看小桂说的情况,是报错的:var builder WebApplication.CreateBuilder(args);builder.Services.AddS…

模式识别之分类---数学贝叶斯方法

http://blog.sina.com.cn/s/blog_6163bdeb0102ehh1.html http://www.zdh1909.com/html/Verilog/29941.html

给定0~N之间的N个数字(大于等于0,小于N,不重复)进行按小到大排列(不用其它的经典排序算法)

1 问题 比如我们给定0~N之间的N个数字(大于等于0,小于N,并且不重复)进行按小到大排列,比如N是5,我们给定数据{3, 2, 1, 0, 4},我们按照从小到大的排名最后就是{0, 1, 2, 3, 4} 2 思路 我们遍历数组,下标为i,我们把i和a[i]进行对比,如果不想等我们就进行交换a[i]和a[a[i]]的值…

【C语言简单说】十一:switch 补

昨天丧心病狂的更新了十节。我都懵逼了。。。 *~ (&#xffe3;﹏&#xffe3;) ** 今天继续&#xff0c;来说一下。。。那个。。。另外一个分支switch。 直接上代码&#xff0c;学过了if的孩子就会觉得很简单的了&#xff1a; #include<stdio.h> #include<stdlib.h…

retain、strong、weak、assign区别

1. 假设你用malloc分配了一块内存&#xff0c;并且把它的地址赋值给了指针a&#xff0c;后来你希望指针b也共享这块内存&#xff0c;于是你又把a赋值给&#xff08;assign&#xff09;了b。此时a 和b指向同一块内存&#xff0c;请问当a不再需要这块内存&#xff0c;能否直接释放…

Java游戏有易筋经_当年武侠游戏中绝世秘籍易筋经!重置游戏几十次,玩家才终于找到?...

原标题&#xff1a;当年武侠游戏中绝世秘籍易筋经&#xff01;重置游戏几十次&#xff0c;玩家才终于找到&#xff1f;在金庸的笔下产生过诸多绝世武学&#xff0c;其中最常被人提及的莫过于少林绝学易筋经。这部由达摩祖师于嵩山少林寺面壁9年留下的武学经书&#xff0c;亦是武…

python路径怎么找windows_如何查看 windows 中 Python安装路径

答疑 qq&#xff1a;3081655843公号&#xff1a; 天枢子python课堂windows平台如果python已经安装好了的话&#xff0c;打开命令行窗口&#xff0c;输入python命令回车&#xff0c;能够进入到python的命令行界面。这个时候我们能够确定的就是&#xff0c;python的安装路径一定被…

微软是如何解决 PC 端程序多开问题的——内部实现

前言上次&#xff0c;我们通过《引用 Microsoft.VisualBasic 解决程序多开的问题》。虽然它非常简单&#xff0c;但是仅适用于 WinForm 应用程序&#xff0c;而且还需要引用不常用的Microsoft.VisualBasic类库。因此&#xff0c;我们决定深挖一下&#xff0c;看看具体是如何实现…

C#常用命名空间

MSDN上的C#.NET Framework类库文档目录树&#xff0c;本人觉得有点不得要领&#xff0c;于是参考搜到的结果简单整理如下&#xff1a; 一、基础命名空间 System 处理内建数据、数学计算、随机数的产生、环境变量、垃圾回收器及一些常见的异常和特征. System.Collections 包含了…

svn之回滚到指定版本

1 问题 我们用svn下载了最新的代码&#xff0c;但是我们需要回退到制定的版本 2 操作 我们先svn showlog 找到对应的版本号 如果用的是svn图形界面客户端 我们点击关联svn项目的鼠标右键&#xff0c;然后有个update to reversion 写上相应的版本即可

番茄工作法—《可以量化的管理学》

6.5.4时间t与番茄工作法 内容提要&#xff1a;番茄工作法划分工作和休息时间&#xff0c;将时间划分为小块&#xff0c;有利于提高工作和休息的效率&#xff0c;提高时间的感知和掌控。 番茄工作法是简单易行的时间管理方法&#xff0c;是由弗朗西斯科西里洛于1992年创立的一种…

【C语言简单说】十二:逻辑运算符

**总觉得今天更两节就好了。 (&#xffe3;.&#xffe3;) ** 困。。。(&#xffe3;.&#xffe3;) \ 今天我们来加深if的使用&#xff0c;我们来讲解运算符&&和||&#xff0c;一个叫做 与&& 一个叫做 或&&&#xff1b;我们先来说 && 我们…

C#遍历一个文件夹下的所有可执行文件

using System; using System.IO;namespace IO操作 {class Program{static void Main(string[] args){Console.WriteLine(File.Exists("C:\IO.txt"));Console.WriteLine(Directory.Exists("C:\"));Console.WriteLine();//获取一个路径下所有可执行文件&…

linux c之把最简单的字符串数据追加写入文件

1 问题 把最简单的字符串数据追加写入文件 2 代码实现 #include <stdio.h> #include <string.h>void write_data_to_file(const char *path, char *str) {FILE *fd fopen(path, "a");if (fd NULL) {printf("fd is NULL and open file fail\n&qu…

Android Json 解析

方法一 使用API解析 json&#xff1a; {"beaconid":"2397","state":"01","userid":"90"} 获取json的方法 private void sendRequestWithHttpClient(){new Thread(new Runnable() {Overridepublic void run() {try…

C#中static void Main(string[ ] args)中的作用及解释

C#中static void Main(string[ ] args)中的作用及解释 static 表示方法是静态的就是说方法在程序被编译的时候就被分配了内存,使用的时候不用生成某个类型的对象,知道程序退出才释放。 void 表示方法没有返回值,就是方法没有renturn 关键字。 main 是方法名,当然这个方法是…

电脑配置java编译报错_java 编译错误

我有两个简单的代码&#xff0c;ClickMe.java代码为&#xff1a;importjava.applet.Applet;importjava.awt.*;importjava.awt.event.*;publicclassClickMeextendsAppletimplementsMouseListener{privateSpo...我有两个简单的代码&#xff0c;ClickMe.java代码为&#xff1a;imp…

正则匹配字符串无匹配不到_实现简单正则表达式匹配

这是facebook的面试题实现包含以下特殊字符的正则表达匹配“.” 匹配任意一个字符“*” 匹配任意多个前面的字符例如给定正则表达“ra.”和字符串“ray”你的函数应该返回true&#xff0c;但是仍用这个正则匹配另一个字符串“raymond”应当返回false给定正则表达“.*at”和字符…