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 希望多多烧香!
  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/bakari/p/2623269.html
Copyright © 2011-2022 走看看