求杨辉3角的数列算法,该怎么解决
求杨辉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怎么计算?
各位大哥给个算法就行,不用给代码,哈哈,比比看的最高效~~嘻
------解决方案--------------------
求杨辉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; interface uses 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 do f[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.
------解决方案--------------------
数列: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
圆满解决