求杨辉3角的数列算法~~

1
1,1
1,2,1
1,3,3,1
..排成数列 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,...
那么,这个数列通项An怎么计算?
各位大哥给个算法就行,不用给代码,哈哈,比比看的最高效~~嘻

解决方案 »

  1.   

    我个人的感觉 ,用arry[i][j],这个比较好~
    算法?  arry[i][j]=arry[i-1][j-1]+arry[i-1][j];i 不知道这样行不行
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    close;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
    str:string;
    i,j,t,n:integer;
    f:array[1..10,1..10] of integer; 
    begin
    str:=chr(10)+chr(13);
    for i:=1 to 10 do
    begin
    f[i][i]:=1;
    f[i][1]:=1;
    end ;
    for i:=3 to 10 do
    for j:=2 to i-1 dof[i][j]:=f[i-1][j-1]+f[i-1][j];for i:=1 to 10 do
    begin
    for j:=1 to i do
    form1.Canvas.TextOut(35*j,35*i,inttostr(f[i][j]));
    form1.Canvas.TextOut( 50*j,50,str);
    end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    close;
    end;end.
      

  3.   

    数列:1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,...
    求第N个数的值方案:
    由二项式定理:T(r+1)=C(r,n)(a^(n-r))b^r
    【ps:C(r,n)表示 组合 C的n取r,公式为C(r,n)=n!/(r!(n-r)!),n!表示求n的阶乘】
    因为只求系数,所以T(r+1)=C(r,n)公式有了,只需要把N转换为n(表示杨辉三角的层数)、r+1(表示所求数在该层的位置)
    只需要做一个循环,用N依次减去1、2、3、……直到N<0为止
    循环的次数-1=n,得到的那个负值+n=r
    这样就可以求得数列的第N项了
    例如:N=13时,对应的数为 杨辉三角第5层1、4、6、4、1的第3个数"6"
    先用循环将N转换为n和r
    N-1-2-3-4-5=-2
    循环了5次,则n=5-1=4
    得到的负值为-2,则r=-2+4=2
    再将n和r带入公式算出T(r+1)=4!/(2!(4-2)!)=4*3*2*1/(2*1*2*1)=6
    圆满解决