杨辉三角程序求解
pascal吧
全部回复
仅看楼主
level 6
摩尼教纱 楼主
要pas的,其他都不要!!!
O(∩_∩)O谢谢
2013年06月11日 14点06分 1
level 14
我来讲吧。
首先认识一下杨辉三角。
2013年06月12日 05点06分 2
level 14
在Pascal中,我们用一个二维数组来存放它。
type arr=array [1..100,1..100] of integer;
var sz:arr;
2013年06月12日 05点06分 3
level 14
然后,我们把杨辉三角居左对齐:
(这张图片貌似是用VB写的)
2013年06月12日 05点06分 4
level 14
下面我们要用一下动归的思想。
2013年06月12日 05点06分 5
level 14
for i:=1 to n do
for j:=1 to n do
if (j=1)or(i=j) then sz[i,j]:=1
else sz[i,j]:=sz[i-1,j]+sz[i,j-1];
2013年06月12日 05点06分 6
level 14
OK,三角形已经搞定了!!!
2013年06月12日 05点06分 7
level 14
至于输出,要输出成等腰三角形样式,比较困难,
所以一般就输出成我发的第二张图的样式。
for i:=1 to n do
begin
for j:=1 to n do write(sz[i,j],' ');
writeln;
end;
2013年06月12日 05点06分 8
level 14
拓展:C语言编写杨辉三角的程序:
2013年06月12日 05点06分 9
level 14
VB版:
Private Sub
Form_click()
n = Val(Text1.Text)
ReDim a(n + 1, n + 1), b(n + 1, n +
1)
Cls
k = 8
For i = 1 To n
Print String((n - i) * k / 2 + 1, "
");
For j = 1 To i
a(i, 1) = 1
a(i, i) = 1
a(i + 1, j + 1) = a(i, j) + a(i, j +
1)
b(i, j) = Trim(Str(a(i, j)))
Print b(i, j); String(k - Len(b(i, j)), "
");
Next j
Print
Next i
End Sub
2013年06月12日 05点06分 10
level 14
顺便将以下数学的解法:
第n行的m个数可表示为C(n-1,m-1)(n-1下标,m-1上标),即为从n-1个不同
杨辉三角的组合数表示元素中取m-1个元素的组合数。
组合数计算方法:C(n,m)=n!/[m!(n-m)!]
2013年06月12日 05点06分 11
level 14
所以也可以这样写:
program try(input,output);
function fac1(n:integer):longint;{阶乘}
var i:integer;t:longint;
begin
t:=1;
for i:=1 to n do
t:=t*i;
fac1:=t;
end;
function fac2(n,m:integer):integer;{组合}
begin
fac2:=fac1(n)/(fac1(m)*fac1(n-m));
end;
var i,j,n:integer;{变量声明}
begin
writeln('输出几行???');
readln(n);{读入行数}
for i:=1 to n do
begin
for j:=1 to n do write(fac2(i,j),' ');
writeln;
end;
readln;
end.
2013年06月12日 05点06分 12
不好意思啊,fac2中的fac1(n)/(fac1(m)*fac1(n-m))应更改为fac1(n) div (fac1(m)*fac1(n-m))
2013年06月12日 05点06分
level 14
调试以后我改了一下,FPC2.6.0通过:
program try(input,output);
function fac1(n:integer):longint;{阶乘}
var i:integer;t:longint;
begin
t:=1;
for i:=1 to n do
t:=t*i;
fac1:=t;
end;
function fac2(n,m:integer):integer;{组合}
begin
fac2:=fac1(n) div (fac1(m)*fac1(n-m));
end;
var i,j,n:integer;{变量声明}
begin
writeln('输出几行???');
readln(n);{读入行数}
for i:=1 to n do
begin
for j:=1 to i do write(fac2(i-1,j-1),' ');
writeln;
end;
readln;
end.
2013年06月12日 05点06分 13
level 14
2013年06月12日 05点06分 14
level 11
LS可真有耐心。。
2013年06月12日 05点06分 15
额,本贴不骂人!!! 注重点[]
2013年06月14日 08点06分
回复 小刘俊0 :呃,可能是我表达方式不对。。我是对LS的耐心表示佩服。。
2013年06月14日 10点06分
……
2013年06月14日 11点06分
回复 82111668_2012 :orzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
2014年07月09日 03点07分
level 12
前面那个貌似是输出直角三角形形状。我这个貌似正常点
2013年06月14日 15点06分 16
额,书上的。。。
2014年07月09日 03点07分
回复 YILANXUAN0 :被你发现了
2014年07月09日 08点07分
回复 先知飞水泉送FB :e ,太明显了吧
2014年07月10日 04点07分
level 13
82111668_2012。。。太神了。。。
2013年06月15日 08点06分 17
level 6
摩尼教纱 楼主
var i,j,n:longint;
a:array[1..100,1..100] of longint;
begin
readln(n);
a[1,1]:=1;
for i:=2 to n do
begin
a[i,1]:=1; a[i,i]:=1;
for j:=2 to i-1 do
a[i,j]:=a[i-1,j-1]+a[i-1,j];
end;
for i:=1 to n do
begin
if i<>10 then write(' ':3*n-3*i);
for j:=1 to i do write(a[i,j]:6);
writeln;
end;
end.
2013年06月16日 04点06分 18
level 12
直角三角形
var a:array[1..20,1..20]of longint;
i,j,n:longint;
begin
read(n);
for i:=1 to n do
begin
for j:=1 to i do
if(j=1)or(j=i) then a[i,j]:=1
else a[i,j]:=a[i-1,j]+a[i-1,j-1];
end;
for i:=1 to n do
begin
for j:=1 to i do write(a[i,j]:5);
writeln;
end;
end.
2014年07月08日 03点07分 19
1