如何不使用数组实现打印“杨辉三角形”?

一、杨辉三角形1.1 杨辉三角形的概念

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

我们先看一下杨辉三角形的打印结果:

如何不使用数组实现打印“杨辉三角形”?
1.2 杨辉三角形的性质

杨辉三角形有很多性质:

1). 每行端点与结尾的数为1.

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

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

4). 第n行的数字有n项。

5). 前n行共[(1+n)n]/2 个数。

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

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

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

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

10). 将第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行的数字分别乘以10^(m-1)^,其中m为该数所在的列,再将各项相加的和为11^(n-1)^。 11^0^=1,

11^1^=1 * 10^0^ + 1 * 10^1^=11,

11^2^=1×10^0^+2×10^1^^+1×10^2^=121,

11^3^=1×10^0^+3×10^1^+3×10^2^+1×10^3^=1331,

11^4^=1×10^0^+4×10^1^10^2^+4×10^3+1×10^4=14641,

11^5^=1×10^0^+5×10^1^+10×10^2^+10×10^3^+5×10^4^+1×10^5^=161051。

12). 第n行数字的和为2^(n-1)^。1=2^(1-1)^,1+1=2^(2-1)^,1+2+1=2^(3-1)^,1+3+3+1=2^(4-1)^,1+4+6+4+1=2^(5-1)^,1+5+10+10+5+1=2^(6-1)^。

13). 斜线上数字的和等于其向左(从左上方到右下方的斜线)或向右拐弯(从右上方到左下方的斜线),拐角上的数字。1+1=2,1+1+1=3,1+1+1+1=4,1+2=3,1+2+3=6,1+2+3+4=10,1+3=4,1+3+6=10,1+4=5。

14). 将各行数字左对齐,其右上到左下对角线数字的和等于斐波那契数列的数字。1,1,1+1=2,2+1=3,1+3+1=5,3+4+1=8,1+6+5+1=13,4+10+6+1=21,1+10+15+7+1=34,5+20+21+8+1=55。

实现杨辉三角形的打印也有很多方式,今天我为大家介绍两种方式:

使用数组的方式:这也是网上比较常见的方式。需要使用数组,所以效率较低。不使用数组的方式:不需要使用数组,所以效率较高。二、使用数组的方式2.1 示意图

根据上面的性质,如果我们要打印一个11行的杨辉三角形,我们可以将整个排列看做是一个n行,0-n列的矩阵,再结合上面的性质8,我们将这个矩阵用一个二维数组来实现,如下图:

如何不使用数组实现打印“杨辉三角形”?
2.2 代码分步实现

2.2.1 根据示意图,我们先定义一个二维数组:

int n = 11;//要几行的数据 int[][] values = new int[n][];//定义n行,但暂时每行的列数先不定义

2.2.2 生成二维数组,根据杨辉三角形性质,n行的数字个数为n:

for(int i = 0;i < values.length ; i++){ values[i] = new int[i + 1];//行0有1列,行1有2列,….,行n有n+1列 }

2.2.3 填充二维数组:

for(int i = 0;i < values.length ; i++){ values[i] = new int[i + 1];//01列,行12列,….,行n有n+1for(int j = 0 ; j < values[i].length ; j++){ //根据性质1,每行的首尾都为:1 if(j == 0 || j == value[i].lenght – 1){ values[i][j] = 1; }else if(i > 1){//根据性质8,除首尾外的其它数字 = 上方数 + 上方左侧的数 values[i][j] = values[i – 1][j] + values[i – 1][j – 1]; } } }

2.2.4 完整代码:

public class YangHui { public static void main(String[] args) { yangHui(8); } private static void yangHui3(int n) { int[][] values = new int[n][];//定义n行,但暂时每行的列数先不定义 for(int i = 0;i < values.length ; i++){ values[i] = new int[i + 1];//行0有1列,行1有2列,….,行n有n+1列 for(int j = 0 ; j < values[i].length ; j++){ //根据性质1,每行的首尾都为:1 if(j == 0 || j == values[i].length – 1){ values[i][j] = 1; }else if(i > 1){//根据性质8,除首尾外的其它数字 = 上方数 + 上方左侧的数 values[i][j] = values[i – 1][j] + values[i – 1][j – 1]; } } } print(values); } private static void print(int[][] values) { for(int i = 0; i < values.length; i++) { for(int j = 0; j < values[i].length; j++) { System.out.printf(“%-4d”, values[i][j]); } System.out.println(); } } }

数组的方式比较好理解,但需要创建二维数组,效率较低,接下来我们看一下不需要数组的写法。

三、不使用数组的方式3.1 算法说明

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

我们将其表示为C(i , j)的组合数,那么就有以下算法:

1、例如:i=3、j=2的位置上,值为C(3,2),即(3*2)/(1*2)=3/1 * 2/2 = 3 2、例如:i=5、j=3的位置上,值为C(5,3),即(5*4*3)/(1*2*3)= 5/1 * 4/2 * 3/3 = 5 * 2 * 1 = 10 3、例如:i=7、j=4的位置上,值为C(7,4),即(7*6*5*4)/(1*2*3*4) = 7/1 * 6/2 * 5/3 * 4/4 = 353.2 代码实现

根据上述算法,我们就可以很方便的写出以下代码:

private static void yangHui2(int n) { for(int i = 0; i < n; i++) {//行 for(int j = 0; j <= i; j++) {//列 //计算每列的值 int value = 1; for(int k = 0; k < j; k++) { value = value * (i-k) / (k+1); } System.out.printf(“%-4d”, value); } System.out.println(); } }

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:如何不使用数组实现打印“杨辉三角形”? https://www.dachanpin.com/a/cyfx/11839.html

(0)
上一篇 2023-05-12 03:49:15
下一篇 2023-05-12 03:50:20

相关推荐

  • 创业者创业成功的秘诀就是它 说好不分手九孔木桶酸菜鱼

      现如今创业者对于当今市场上的种类繁多的创业项目弄得眼花缭乱,除去很多风险较大的投资, 创业者将投资目光放在了国民餐饮品牌上,但品种较多的餐饮项目仍让创业者感到头疼。这时说好不分手九孔木桶酸菜鱼出现了,它凭借契合当今市场的经营模式,获得更多消费者的青睐,也让创业者走上发家致富的道路。   三分钟极致出餐二十分成功翻盘,高效率经营模式受消费者青睐   如今的…

    2023-05-19
    66
  • 青年创业系列——进山采蜜的“95后学生军”

    “必须找到镇店好蜂蜜” 学生创业没有本钱,所有的货品全是向商家借的。15个大学生齐心协力,2017年春节都没回家,轮流值守看店。从2016年7月至今,整个团队的销售额达到50万。但是因为货物全是借贷,还掉货款和各项开支,只剩下1000块钱。 “我们的‘丽江好货’,就是要卖品质最好、最优秀的本地产品。我们15个人来自全国各地,我老家陇南有花椒,福建的柯双可以找…

    创业分享 2023-05-24
    84
  • 如皋顾庄生态园荣获“南通市级创业孵化基地”称号

    记者20日获悉,2017年南通市级创业孵化基地评选结果日前揭晓,顾庄生态园以总分第一的成绩荣登南通市级创业孵化基地公示名单榜首。 据了解,顾庄生态园始建于2008年,占地面积62万平方米,是集盆景展销、主题餐饮、文化休闲、养生度假等功能于一体的现代化乡村旅游创客基地和创业孵化基地,先后辐射孵化苏通生态观光园、钱长3000亩草坪基地、江源植物造景园、绿洲园艺高…

    创业分享 2023-05-22
    86
  • 挥洒创业激情 迸发创新才智

    黄桥街道举办“工业设计需求对接会——苏州黄桥专场”主题活动,来自全省的工业设计专家以及黄桥本地的企业家代表共计60余人汇集一堂,共谋发展。 望亭镇正积极面向“中国制造2025”发展战略,以精密加工、智能制造等新兴产业为发展方向,逐步转型新兴产业强镇。目前,着力推进产业项目精准对接、精准落地,为望亭镇的发展注入新的活力。 (责任编辑:admin)

    创业分享 2023-05-21
    79
  • 扶贫工厂开进村 针线“绣”出好日子

      农家姑娘侯佑林今年26岁,家住云南省富源县富村镇新店村委会龙马山村。返乡创业三年来,她的21个村级扶贫工厂相继扎根各村委会,带领家乡1000余户贫困户3000多名留守妇女,一针一线“绣”出了好日子。   厚积薄发 刺绣走红穷村   侯佑林原本在昆明经营彩票店,2015年,与丈夫商量后放弃了彩票店经营,独自来到浙江义乌刺绣工艺品厂打工。   “当时厂里每月…

    2023-05-11
    74

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息