我写的杨辉三角生成算法,请大家评价一下,有没有不足或更好的算法

westuser 2009-05-05 04:06:00
加精
是否会造成内存泄漏?
是否有更优的算法?我看到一个是先把所有的1先赋值,再填充其它项,循环两次我觉得不太好。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
LabeledEdit1: TLabeledEdit;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
yh:array of array of Integer;
procedure yhTriangle(row:Integer);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
s:TStrings;
ss:string;
r,I,J: Integer;
begin
try
r:=StrToInt(LabeledEdit1.Text);
except
r:=0;
ShowMessage('只能输入数字');
LabeledEdit1.Clear;
LabeledEdit1.SetFocus;
end;
yhTriangle(r);
s:=TStringList.Create;
for I := 0 to r - 1 do
begin
ss:='';
for J := Low(yh[i]) to High(yh[i]) do
ss:=ss+IntToStr(yh[i][j])+' ';
s.Add(Trim(ss));
end;
Memo1.Lines:=s;
s.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.yhTriangle(row:Integer);
var
i: Integer;
j: Integer;
begin
//开辟空间
SetLength(yh,row);
for i:= Low(yh) to High(yh) do
begin
SetLength(yh[i],i+1);
end;
//填充
for i := Low(yh) to High(yh) do
for j := Low(yh[i]) to High(yh[i]) do
begin
if (j=Low(yh[i])) or (i=j) then
yh[i][j]:=1
else
yh[i][j]:=yh[i-1][j-1]+yh[i-1][j];
end;
end;

end.
...全文
1209 95 打赏 收藏 转发到动态 举报
写回复
用AI写文章
95 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztdou 2009-05-07
  • 打赏
  • 举报
回复
全是些没用的评论!
yuxingleo 2009-05-07
  • 打赏
  • 举报
回复
Console.WriteLine(" 1\n");
Console.WriteLine(" 1 1\n");
Console.WriteLine(" 1 2 1\n");
Console.WriteLine(" 1 3 3 1\n");
Console.WriteLine(" 1 4 6 4 1\n");
Console.WriteLine(" 1 5 10 10 5 1\n");
Console.WriteLine(" ………………………………");
love1901 2009-05-07
  • 打赏
  • 举报
回复
顶一下
wangzhiwei0823 2009-05-07
  • 打赏
  • 举报
回复
写复杂了
a61032707 2009-05-07
  • 打赏
  • 举报
回复
顶~
wangkongxinglang 2009-05-07
  • 打赏
  • 举报
回复
运行调试调试不就知道了
lidald 2009-05-07
  • 打赏
  • 举报
回复
你累不?
zrpxxx 2009-05-07
  • 打赏
  • 举报
回复
Console.WriteLine(" 1\n");
Console.WriteLine(" 1 1\n");
Console.WriteLine(" 1 2 1\n");
Console.WriteLine(" 1 3 3 1\n");
Console.WriteLine(" 1 4 6 4 1\n");
Console.WriteLine(" 1 5 10 10 5 1\n");
Console.WriteLine(" ………………………………");
wangjun1990521 2009-05-07
  • 打赏
  • 举报
回复
你的编程风格不啥好啊
KevinLaw 2009-05-07
  • 打赏
  • 举报
回复
好复杂,支持一下
jm8542 2009-05-06
  • 打赏
  • 举报
回复
这个不会
deepsky725 2009-05-06
  • 打赏
  • 举报
回复
问题很尖锐啊
测试菜鸟 2009-05-06
  • 打赏
  • 举报
回复
mark
gui911gui 2009-05-06
  • 打赏
  • 举报
回复
看起来是有点复杂了!
cammy168 2009-05-06
  • 打赏
  • 举报
回复
路过 ~ 顶一顶
vs_kobe 2009-05-06
  • 打赏
  • 举报
回复
还OK吧.....
bber01 2009-05-06
  • 打赏
  • 举报
回复


<html>
<head>
<title>Untitled</title>
<SCRIPT language="JavaScript">
/*
Example 1:
in: 1
out: 1 1
Example 2:
in: 1 1
out: 1 2 1
Example 3:
in: 1 2 1
out: 1 3 3 1
...
*/
function nextLine (thisLine)
{
var inArr = thisLine;
var outArr = new Array ();
for (var i = 0; i <= inArr.length; i++)
{
if (i == 0 || i == inArr.length)
{
outArr[i] = 1;
}
else
{
outArr[i] = inArr[i - 1] + inArr[i];
}
}
return outArr;
}

/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
...
*/

function yhTriangle (n)
{
var Triangle = new Array ();
Triangle[0] = new Array ();
Triangle[0][0] = 1;
//alert (Triangle[0][0]);
for (var i = 1; i < n; i++)
{
Triangle[i] = nextLine (Triangle[i - 1]);
}
return printArr (Triangle);
}

function printArr (arr)
{
var str = '';
for (var i = 0; i < arr.length; i++)
{
for (var j = 0; j < arr[i].length; j++)
{
str += arr[i][j] + ' ';
}
str += '\n';
}
return (str);
}
</SCRIPT>
</head>

<body>
<label>lines:</label>
<input type="Text" id="txtN" name="txtN" value="15">
<input type="submit" id="ud" name="ud" value="calculate" onclick="document.getElementById ('outTxa').value = yhTriangle (document.getElementById('txtN').value);">
<br>
<textarea id="outTxa" name="outTxa" style="width:100%; height:100%"></textarea>
</body>
</html>

jadeluo 2009-05-06
  • 打赏
  • 举报
回复
把判断可以省略掉:

procedure TForm1.yhTriangle(row: Integer);
var
i, j: Integer;
begin
SetLength(yh, row);
for i := 0 to row - 1 do
begin
SetLength(yh[i], i + 1);
yh[i][0] := 1;
yh[i][i] := 1;
for j := 1 to i - 1 do
yh[i][j] := yh[i-1][j-1] + yh[i-1][j];
end;
end;
shloveluna 2009-05-06
  • 打赏
  • 举报
回复
等我研究啊!
westuser 2009-05-06
  • 打赏
  • 举报
回复
本来我打算Google,可是没找到delphi代码,而且在csdn提问不是想得到一些讲解而不是简单的源代码吗。可是现在连源代码都没有:(
加载更多回复(70)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧