杨辉三角 订阅
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。 [1]  杨辉三角是中国数学史上的一个伟大成就。 [1] 展开全文
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。 [1]  杨辉三角是中国数学史上的一个伟大成就。 [1]
信息
别    称
贾宪三角形、帕斯卡三角形
表达式
几何
提出者
杨辉
应用学科
数学,计算机
发现者
杨辉
中文名
杨辉三角
适用领域范围
数学,计算机
外文名
Pascal's Triangle
提出时间
约1050年
使用人群
中学生、大学生,编程专家、等等
杨辉三角简介
杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合 [2]  。
收起全文
精华内容
参与话题
问答
  • 经典算法(5)杨辉三角

    万次阅读 多人点赞 2019-11-04 17:15:35
    杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

    这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

    用知识改变命运,让我们的家人过上更好的生活

    相关文章

    点此查看 【算法系列】 博客文章


    一、杨辉三角的介绍

    百度百科对于杨辉三角是这样介绍的:
    在这里插入图片描述

    二、杨辉三角的算法思想

    (此图片来源于网络)

    杨辉三角的两个腰边的数都是 1,从第3行起,除第一个数和最后一个数外,其它位置的数都是上顶上两个数之和。

    三、代码实现

    1.第一种写法

    public class YangHuiTriangle1 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("输入要打印的行数:");
            int n = scanner.nextInt();
            // 打印杨辉三角
            getTriangle(n);
        }
    
        /**
         * 打印杨辉三角
         *
         * @param n 要打印的行数
         * @return
         */
        private static int[][] getTriangle(int n) {
            // 创建一个二维数组,此二维数组用来存放杨辉三角中每一行的值
            int[][] array = new int[n][n];
            // 给数组元素赋值
            for (int i = 0; i < array.length; i++) {
                // 每一行的值
                array[i] = new int[i + 1];
                // 给首末元素赋值
                array[i][0] = array[i][i] = 1;
                // 给每行的非首末元素赋值
                if (i > 1) {
                    for (int j = 1; j < array[i].length - 1; j++) {
                        array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
                    }
                }
            }
            // 遍历二维数组
            for (int i = 0; i < array.length; i++) {
                for (int j = 0; j < array[i].length; j++) {
                    System.out.print(array[i][j] + "\t");
                }
                System.out.println();
            }
            return array;
        }
    }
    
    

    代码执行结果:

    输入要打印的行数:10
    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	
    1	9	36	84	126	126	84	36	9	1	
    

    2.第二种写法

    public class YangHuiTriangle2 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("输入要打印的行数:");
            int n = scanner.nextInt();
            // 打印杨辉三角
            int array[][] = getTriangle(n);
            //  打印成等腰三角形
            printTriangle(array);
        }
    
        private static int[][] getTriangle(int n) {
            // 创建一个二维数组,此二维数组用来存放杨辉三角中每一行的值
            int[][] array = new int[n][n];
            // 给数组元素赋值
            for (int i = 0; i < array.length; i++) {
                // 每一行的值
                array[i] = new int[i + 1];
                // 给首末元素赋值
                array[i][0] = array[i][i] = 1;
                // 给每行的非首末元素赋值
                if (i > 1) {
                    for (int j = 1; j < array[i].length - 1; j++) {
                        array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
                    }
                }
            }
            return array;
        }
    
        /**
         * 打印成等腰三角形
         *
         * @param array
         */
        public static void printTriangle(int[][] array) {
            for (int i = 0; i < array.length; i++) {
                // 输出杨辉三角数字前面的空格
                for (int j = 0; j < array.length - 1 - i; j++) {
                    System.out.print("   ");
                }
                for (int j = 0; j <= i; j++) {
                    // 用空格填补空位置
                    System.out.print("   ");
                    // 以十进制整数的形式输出,位宽是3,左对齐
                    System.out.printf("%-3d", array[i][j]);
                }
                System.out.println();
            }
        }
    }
    

    代码执行结果:

    输入要打印的行数:
    10
                                  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  
       1     9     36    84    126   126   84    36    9     1  
    

    上一篇 经典算法(4)一文搞懂什么是 快速排序
    下一篇 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法


    由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

    展开全文
  • 杨辉三角

    千次阅读 2020-01-08 21:22:44
    7-5杨辉三角(10 分) 打印n行杨辉三角,n<10。 输入格式: 直接输入一个小于10的正整数n。 输出格式: 输出n行杨辉三角,每个数据输出占4列。 输入样例: 5 输出样例: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 #...

    7-5 杨辉三角 (10 分)

    打印n行杨辉三角,n<10。

    输入格式:
    直接输入一个小于10的正整数n。

    输出格式:
    输出n行杨辉三角,每个数据输出占4列。

    输入样例:
    5
    输出样例:
       1
       1   1
       1   2   1
       1   3   3   1
       1   4   6   4   1

    #include<stdio.h>
    int main(){
    	int n;
        scanf("%d",&n);
    	int a[n][n];
    	for(int i = 0 ;i < n; i++){
    	
    		a[i][i] = 1;
    		a[i][0] = 1;
    	}
    	for(int i = 2;i < n; i++){
    		for(int j = 1; j<= i-1 ; j++){
    			a[i][j] = a[i-1][j-1]+a[i-1][j];
    		}
    	}
    	for(int i = 0 ;i < n; i++){
    		for(int j = 0; j <= i; j++){
    			printf("%d ",a[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    } 
    展开全文
  • python实现打印杨辉三角,简洁明了注释清晰下载可以直接运行
  • C语言——杨辉三角的两种形式 杨辉三角是我们从初中知道的,现在我们用C语言将他在计算机上显示出来 在初中,我们就知道,杨辉三角的两个腰边的数都是 1,其它位置的数都是上顶上两个数之和。这就是我们用C语言写...

    C语言——杨辉三角的两种形式

    杨辉三角是我们从初中知道的,现在我们用C语言将他在计算机上显示出来

    在初中,我们就知道,杨辉三角的两个腰边的数都是 1,其它位置的数都是上顶上两个数之和。这就是我们用C语言写杨辉三角的关键之一。

    include <stdio.h>
    define N 14
    void main()
    {
        int i, j, k, n=0, a[N][N];  /*定义二维数组a[14][14]*/
        while(n<=0||n>=13){  /*控制打印的行数不要太大,过大会造成显示不规范*/
            printf("请输入要打印的行数:");
            scanf("%d",&n);
        }
        printf("%d行杨辉三角如下:\n",n);
        for(i=1;i<=n;i++)
            a[i][1] = a[i][i] = 1;  /*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*/
        for(i=3;i<=n;i++)
            for(j=2;j<=i-1;j++)
                a[i][j]=a[i-1][j-1]+a[i-1][j];  /*除两边的数外都等于上两顶数之和*/ 
        for(i=1;i<=n;i++){
            for(k=1;k<=n-i;k++)
                printf("   ");  /*这一行主要是在输出数之前打上空格占位,让输出的数更美观*/
            for(j=1;j<=i;j++)  /*j<=i的原因是不输出其它的数,只输出我们想要的数*/
                printf("%6d",a[i][j]);
            
            printf("\n");  /*当一行输出完以后换行继续下一行的输出*/
        }
        printf("\n");
    }
    
    include <stdio.h>
    
    /* 
     * 定义阶乘,在这里可能会想。为什么要用float,当我试第一次的时候,
     * 如果用int的话,那么在打印行数多了以后就会出错。
     * 这是因为阶乘的数比较大,如果用int就不够用了。下同
     */
    float J(int i){
        int j;
        float k=1;
        for(j=1;j<=i;j++)
            k=k*j;
        return(k);
    }
    float C(int i,int j){  /*定义组合数*/
        float k;
        k=J(j)/(J(i)*J(j-i));
        return(k);
    }
    void main(){
        int i=0,j,k,n;  /*打印杨辉三角*/ 
        while(i<=0||i>16){
            printf("请输入要打印的行数:");
            scanf("%d",&i);
        }
        printf("%d行杨辉三角如下:\n",i);
    
        for(j=0;j<i;j++){
            for(k=1;k<=(i-j);k++)
                printf("  ");
            for(n=0;n<=j;n++)
                printf("%4.0f",C(n,j));
            printf("\n");
        }
        printf("\n\n");
    }
    
    展开全文
  • C++编程 杨辉三角

    万次阅读 多人点赞 2019-08-28 19:04:37
    杨辉三角杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出...

    杨辉三角

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

    1. 每个数等于它上方两数之和。
    2. 每行数字左右对称,由1开始逐渐变大。
    3. 第n行的数字有n项。
    4. 前n行共[(1+n)n]/2 个数。
    5. 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
    6. 第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。
    7. 每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即
      C(n+1,i)=C(n,i)+C(n,i-1)。
    8. (a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。
    9. 将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。
      ……

    第一种实现形式:
    【二维数组实现杨辉三角 输出10行】

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    /*杨辉三角最终显示效果是一个等腰三角形,两个最外边都是1
      杨辉三角的根本在于,每个数等于它上方两数之和
    */
    int main(){
      const int n=11;//变量n在此处起到了限制输出行数的作用,可优化成用户输入
      int i,j,a[n][n];
    
      //使第一列和对角线元素的值为1
      for (i=1;i<n;i++){			//前两行全为1,拿出来单独处理
    	 a[i][i]=1;//使最右侧边全为1
         a[i][1]=1;//使最左侧边全为1
      }
    
      //从第三行开始处理
      for (i=3;i<n;i++)				//三行开始出现变化
        for (j=2;j<=i-1;j++) //j始终慢i一步
           a[i][j]=a[i-1][j-1]+a[i-1][j];//每个数等于它上方两数之和,如a32=a21+a22
    
      //输出数组各元素的值
      for (i=1;i<n;i++){			//从第一行开始
    	 for (j=1;j<=i;j++)			//利用j将每一行的数据全部输出
           cout<<setw(5)<<a[i][j]<<" ";	//在C++中,setw(int n)用来控制输出间隔,这里是指前元素末尾与后元素末尾之间有个5空格位
         cout<<endl;
      }
      cout<<endl;
      return 0;
    }
    

    效果展示图
    编程效果图

    PS1:setw()函数的使用:
     C++函数std::setw的行为与在流上调用n作为参数的成员宽度一样,它作为操纵器插入/提取(在输入流或输出流上插入/提取)。
    它用于设置要在输出操作上使用的字段宽度。

    特点:

    1. setw()是C ++中的库函数。
    2. setw()在#include <iomanip.>中声明
    3. setw()将设置字段宽度。
    4. setw()设置要用作 下一个插入操作的字段宽度的字符数 。
      setw()效果展示图
      参考资料:
      【C4learn.com】C ++ setw():设置字段宽度

    PS2:std是什么意思?
     在C++中,std其实就是standard标准的意思,std是一个类(输入输出标准),它包括了cin成员和cout成员,using name space std ;以后才能使用它的成员。
     例如std::cin就是标准输入,std::cout就是标准输出的意思。
     #include <iostream.>,它包含了一个类,在类的使用之前要预处理一下,using namespace std;就是这个功能,然后你就可以使用cin,cout这两个成员函数了,假设你不使用预处理(using namespace std;),就需要加上加上std::cin或者std::cout再去使用它的成员函数。

       参考资料:
        【百度知道】C++中"std::"是什么意思?

    第二种实现形式:
    【指针动态开辟空间,一维数组实现杨辉三角 输出任意行】
    该方法使用灵活,但是理解略显困难。
    杨辉三角

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int* YangHuiData(int n); //n是杨辉三角形的行数 
    void YangHuiShow(int *pData, int n);//在屏幕上打印杨辉三角形 
    int main() {
    	int n;
    	cout << "请输入杨辉三角形的行数";
    	cin >> n;
    	//计算杨辉三角并保存到二维数组
    	int *pData = YangHuiData(n);
    	//在屏幕上打印等腰三角形的杨辉三角 
    	YangHuiShow(pData, n);
    	//n是杨辉三角形的行数 
    }
     
    int* YangHuiData(int n) {
    	int *a = new int[n*n]; 用指针a指向new动态分配的长度为(n*n)*sizeof(int)的内存空间 
    
    	//完成杨辉三角形的计算,没有显示的位置填0 
    	int i, j;
    	for (i = 0; i<n*n; i++) {
    		a[i] = 0;			//填0操作		
    	}
     
    	a[0] = 1;
    	a[n] = 1;
    	a[n + 1] = 1;
     
    	for (i = 2; i<n; i++) {
    		a[i*n] = 1;
    		a[i*n + i] = 1;
    		for (j = 1; j<i; j++) {
    			a[i*n + j] = a[(i - 1)*n + j - 1] + a[(i - 1)*n + j]; //通过a[i*n+j]来访问第(i*n+j)个数据,根据杨辉三角的特性求值
    		}
    	}
     
    	return a;
    }
    void YangHuiShow(int *a, int n) {
    	//根据数据a指向的二维数组在屏幕上打印 
    	//杨辉三角形,每行前面填充合适的空格 
    	//以显示成等腰三角形,左右对称 
    	int i, j;
    	for (i = 0; i<n; i++)
    	{
    		for (j = 0; j<n - i - 1; j++)
    			cout << setw(3) << " ";//前导空格,为单个数据的一半宽度  
    		for (j = 0; j <= i; j++)
    			cout << setw(6) << a[i*n + j];
    		cout << endl;
    	}在这里插入图片描述
    }
    

    代码分析图(以3x3为例)
    3x3代码分析图
    效果展示图
    yanghuihanshu效果展示图

    PS3:C++中如何正确的开辟一个动态的二维数组:
    图片展示
    两种定义二维数组的方式,访问数据的方式,优缺点:

    方法一:

    定义方式:
    int **p=new int*[10];
    for (int i=0;i<=10;++i)
           {
                  p[i]=new int[10];
            }
            
    访问数据的方式:直接通过a[i][j]访问第i行第j列的数据。
    优缺点:通过a[i][j]访问数据容易,但是new的次数太多,释放空间不容易。
    

    方法二:

    定义方式:
    
     int *p=new int[10*10];(ps:这种事当成一维数组连续开辟的。)
     
     访问数据的方式:通过a[i*10+j]来访问第(i*10+j)个数据。
     优缺点:访问数据很方便,且new的次数少,释放空间容易,但是不便于理解。
    

    在这里插入图片描述
    *图例:(看&p[9]和&p[10]等地址相差为4个字节,即它们是相连的,所以为一维数组)

       参考资料:
        【转载于 ycz_csdn】C++中如何正确的开辟一个动态的二维数组


    参考资料:
    【百度百科】杨辉三角
    【coolsunxu】C++编写杨辉三角
    【数学之美】杨辉三角(帕斯卡三角)的奇特性质
    【百度经验】用例子理解排列组合及基本公式如何计算


    展开全文
  • C# 实现杨辉三角

    万次阅读 多人点赞 2018-06-13 11:35:59
    杨辉三角 一 历史: 杨辉三角,是二项式系数在三角形中的一种几何排列。在中国南宋数学家杨辉的《详解九章算法》一书中出现。 二 特点: (1)第一列和最后一列的数值为1 (2)中间列,数值等于它上方两...
  • 杨辉三角重要性质

    千次阅读 2017-10-14 09:24:45
    前提:每行端点与结尾的数为1. 每个数等于它上方两数之和。 ...每行数字左右对称,由1开始逐渐变大。...第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。...可用此性质写
  • C语言打印杨辉三角的多种方法

    万次阅读 多人点赞 2018-10-04 00:21:54
    3.在屏幕上打印杨辉三角。 1 1 1 1 2 1 1 3 3 1 解法一: #define _CRT_SECURE_NO_WARNINGS 1 #include &lt;stdio.h&gt; int main() {  int i,j,n = 0;  //首先定义二维数组计数符号i,j 还有杨辉三角...
  • 打印杨辉三角

    2019-05-09 15:07:17
    #define _CRT_SECURE_NO_WARNINGS #include <... //用二维数组来储存杨辉三角中的数字 int n; printf("请输入一个整(n >= 10): \n"); //想要修改打印行数修改二维数组的范围即可,也可用定义...
  • 【c++程序】打印杨辉三角

    万次阅读 2015-01-23 19:09:25
    #include using namespace std; int main() { const int n=10; int a[n][n]; int i,j; for( i=0;i;i++) { for( j=0;j;j++) { if(j==0||j==i) { a[i][j]=1; } ... a[i][j]=a
  • C#打印杨辉三角

    千次阅读 2016-04-02 13:23:13
    重主要的方法在于: 1.初始化二维数组 2.边界赋值 3.中心值赋值 4.输出 <pre name="code" class="csharp"> class Program { static void Main(string[] args)... Console.WriteLine("请输入行...
  • 用C语言打印杨辉三角

    万次阅读 多人点赞 2016-01-11 00:12:23
    用C语言打印杨辉三角 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。这是杨辉三角:
  • Python 打印杨辉三角形(包括金字塔的款式的~~)

    万次阅读 多人点赞 2018-07-29 17:15:24
    今天是准备被这周的所以内容归纳一下的,然后看到的经典的杨辉三角形,所以就把代码整理了一下。给他取了个狂野的名字。 ==================================疯狂的杨辉三角形=================================== ...
  • 数据结构课后作业,自己写的,用队列的方法打印杨辉三角
  • jsp打印杨辉三角

    千次阅读 2016-09-15 20:06:37
    String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> ... My JSP 'index.jsp' startin
  • 功能为:根据你所输入的行数,打印杨辉三角形到第几行
  • C++打印杨辉三角形

    万次阅读 2015-08-22 15:05:38
    打印出以下的杨辉三角形(要求打印出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 1 ………… 要求打印出10行 杨辉三角形:端点数为1,每个数等于它肩上两个数之和。 #include "stdafx.h...
  • C语言:打印杨辉三角前10行

    万次阅读 多人点赞 2018-12-19 00:37:48
    什么是杨辉三角? 杨辉三角,是二项式系数在三角形中的...只要找到其数据元素之间的关系,打印杨辉三角便不是那么的困难。 代码步骤: #include&amp;lt;stdio.h&amp;gt; main() { int i, j, a[11][11]; ...
  • java 利用数组打印杨辉三角

    千次阅读 2018-10-28 12:41:45
    打印杨辉三角 一维数组 Triggle1.java package 第一章; //利用一维数组打印杨辉三角 import java.util.Scanner; public class Triggle1 { public static void value(int n) { int i=1; int triggle[] = new ...
  • JavaScript打印杨辉三角

    千次阅读 2019-03-25 22:23:32
    JavaScript打印杨辉三角这里是一个基础极差的菜鸡前端小白杨辉三角实现思路合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容...

空空如也

1 2 3 4 5 ... 20
收藏数 20,659
精华内容 8,263
关键字:

杨辉三角