首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求杨辉3角的数列算法,该怎么解决

2012-02-22 
求杨辉3角的数列算法求杨辉3角的数列算法~~即11,11,2,11,3,3,1..排成数列 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,

求杨辉3角的数列算法
求杨辉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怎么计算?


各位大哥给个算法就行,不用给代码,哈哈,比比看的最高效~~嘻


[解决办法]

Delphi(Pascal) code
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);beginclose;end;procedure TForm1.Button2Click(Sender: TObject);varstr:string;i,j,t,n:integer;f:array[1..10,1..10] of integer; beginstr:=chr(10)+chr(13);for i:=1 to 10 dobeginf[i][i]:=1;f[i][1]:=1;end ;for i:=3 to 10 dofor j:=2 to i-1 dof[i][j]:=f[i-1][j-1]+f[i-1][j];for i:=1 to 10 dobeginfor j:=1 to i doform1.Canvas.TextOut(35*j,35*i,inttostr(f[i][j]));form1.Canvas.TextOut( 50*j,50,str);end;end;procedure TForm1.Button1Click(Sender: TObject);beginclose;end;end.
[解决办法]
数列: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
圆满解决


热点排行