首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 生活 > 给数组排序的三种方法(如何不使用数组实现打印)
给数组排序的三种方法(如何不使用数组实现打印)
更新时间:2024-07-02 18:29:08
一、杨辉三角形1.1 杨辉三角形的概念

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

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

给数组排序的三种方法(如何不使用数组实现打印)1

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^ 2x10^1^^ 1x10^2^=121,

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

11^4^=1x10^0^ 4x10^1^10^2^ 4x10^3 1x10^4=14641,

11^5^=1x10^0^ 5x10^1^ 10x10^2^ 10x10^3^ 5x10^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.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];//行0有1列,行1有2列,....,行n有n 1列 for(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 = 35

3.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(); } }

,
相关推荐RECOMMEND
速转火箭卡组搭配(皇室战争卡组解析)
速转火箭卡组搭配?冰雪精灵这张一费的小精灵性价比非常的高,别看他个子小,却是一个范围攻击的卡片,这张卡用的好,可以解掉骷髅海的不小一部分,剩下的部分让塔慢慢吃掉就可以了,我来为大家科普一下关于速转火箭...
菠萝做菜有哪些做法(菠萝可以做哪些菜)
菠萝做菜有哪些做法?菠萝炒饭,准备食材如下:菠萝1个,米饭500克,油适量,胡萝卜半根,青豆50克,广式腊肠1根,盐3克,生抽20克,蒜末2克,具体做法如下:胡萝卜去皮切丁,腊肠洗净切丁备用,菠萝竖着...
空气炸锅和电烤箱的区别(空气炸锅和电烤箱有什么区别)
空气炸锅和电烤箱的区别?预热时间/功率:空气油炸锅:3-5分钟/低功率;家用烤箱:10-15分钟/大功率;分析:烤箱一般规格是28L和30L,空气炸锅是3L大小,只有8L大小空气油炸锅制作食物的时间会...
便秘怎么改善(饮食调整最关键)
便秘怎么改善?饮食调理:(1)主食粗细搭配:,我来为大家科普一下关于便秘怎么改善?下面希望有你要的答案,我们一起来看看吧!便秘怎么改善饮食调理:(1)主食粗细搭配:主食中粗杂粮和薯类富含膳食纤维,日常...
开江交通管制最新通告(大修后首次体检)
10月9日起,泸州长江大桥将进行为期4天的“体检”,这也是泸州长江大桥自去年完成大修后迎来的首次“体检”。日前,泸州市交通运输局、泸州市公安局联合发布《关于2021年普通国省干线公路桥梁检查期间实施临...
吃叶酸的作用(吃叶酸有什么好处)
吃叶酸的作用?在怀孕前,男女双方同时服用叶酸,可以提高精子、卵子质量,从而提高受精卵的质量怀孕后女性继续服用叶酸,可以有效的预防胎儿发生神经管畸形,接下来我们就来聊聊关于吃叶酸的作用?以下内容大家不妨...