zoukankan      html  css  js  c++  java
  • Pascal三角形

    作者:bakari   时间:2012.8.4

    Pascal三角形又称杨辉三角形,是多项式系数的一种规律展示,最早是由我国数学家杨辉发现,比Pascal早200多年。

    下面简单地总结一些其算法。

    一、数组计算法:

    1、公式推导:

    这个很简单,看图就知道

    由图可得公式:a[ i ][ j ] = a[i - 1] [j - 1] + a[i - 1][ j ] 

    2、代码展示:

     1 void YangHuiTriangleArray(int Row)                           
     2 {
     3     for (int i = 0;i < Row; i++)
     4     {
     5         for (int j = 0;j <= i; j++)
     6         {
     7             if (j == 0 || j == i)  //置1条件
     8                 a[i][j] = 1;
     9             else 
    10                 a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    11             cout<<a[i][j]<<" ";
    12         }
    13         cout<<endl;
    14     }
    15 }

    二、递归法

    这个是最好想到的,这一步的实现需要上一步作为铺垫。

    废话不多说,直接来看代码

     1 long GetElement(int Row,int Col)
     2 {
     3     if (0 == Col || Row == Col)   //递归出口
     4         return 1;
     5     else 
     6         return GetElement(Row - 1,Col - 1) + GetElement(Row - 1,Col);
     7 }
     8 
     9 void YangHuiTriangleRecur(const long n)
    10 {
    11     for(int i = 0;i < n; i++)
    12     {
    13         for(int j = 0; j <= i; j++)
    14             cout<<GetElement(i,j)<<" ";
    15         cout<<endl;
    16     }
    17 }

    三、数学推导法

    本方法主要借助数学推导,比起前两种性能要好很多

    令X10= 1 ;则

    X20 = 1 , X21 = X20 * (2 - 1 + 1)/1 = 2 , X22 = X21 * (2 - 2 + 1)/2 = 1;

    X30 = 1 , X31 = X30 * (3 - 1 + 1)/1 = 3 , X32 = X31 * (3 - 2 + 1)/2 = 3 , X33 = X32 * (3 - 3 + 1)/3 = 1;

    .........

    Xij = 1, Xij+1 = Xij * (i - j + 1)/j , ...... , Xii = 1;

    大体就是这么个推导法,下面看代码:

     1 void YangHuiTriangle(int RowN)
     2 {
     3     for (int i = 0;i < RowN;i++)
     4     {
     5         for (int j = 0;j <= i;j++)
     6         {
     7             if (j == 0)        //第一个数前面要输出相应的空格
     8             {
     9                 for (int k = 1;k < RowN - i; k++)
    10                     cout<<"  ";
    11             }
    12             else 
    13                 cout<<" ";                          //数与数之间输出相应空格  
    14             printf("%3d",ComputeNextInteger(i,j));  //输出下一个数
    15         }
    16         cout<<endl;
    17     }
    18 }
    19 
    20 int ComputeNextInteger(int iRow ,int iRowIndex)
    21 {
    22     long p = 1;
    23     for (int i = 1;i <= iRowIndex; i++)    
    24         p = p * (iRow - i + 1)/i;            //根据公式计算每一个数;
    25     return p;
    26 }

    见图:

    OK!希望多多烧香!  

    stay hungry stay foolish ----jobs 希望多多烧香!
  • 相关阅读:
    php+mysql折线图
    转载] magento 产品数据表结构
    magento 开启模板路径提示
    magento smtp设置
    magento 搬家
    利用DIV+CSS制作网页过程中常用的基本概念及标签使
    使用CSS创建有图标的网站导航菜单
    在网页中使用H1标记的须注意的事项
    兼容firefox的iframe高度自适应代码
    jQuery: 图片不完全按比例自动缩小
  • 原文地址:https://www.cnblogs.com/bakari/p/2623269.html
Copyright © 2011-2022 走看看