回 帖 发 新 帖 刷新版面

主题:请教下杨辉三角型

[em18]请教一下各位高手杨辉三角形大家怎么做的啊~我是先定义了一个函数算组合数,还有什么好办法吗?

回复列表 (共22个回复)

沙发

定义一个二维数组。

板凳

不太明白,能给我讲讲吗?谢谢啊[em9]

3 楼

我以七阶为例,给你讲一下:

program gdshs;
var
a:array[1..7,1..13] of integer;
i,j,k:integer;
begin
for i:=1 to 7 do
begin
  for j:=1 to 13 do
   a[i,j]:=0;    {先把数组的全部元素赋为0}
   a[i,7-(i-1)]:=1; {第i行的第一个非空元素赋1}
   a[i,7+(i-1)]:=1;  {第i行的最后一个非空元素赋1}
   for k:=1 to i-2 do  {第i行共有i-2个非首末非空元素,需填数}
   begin
    j:=7-(i-1)+2*k;  {计算非首末非空元素的纵坐标}
    a[i,j]:=a[i-1,j-1]+a[i-1,j+1]; {赋为肩膀上两数之和}
   end;
   for j:=1 to 13 do
    if a[i,j]=0 then write(' ');
    else write(a[i,j]:2);
  writeln;
end;
end.

4 楼

其实一维数组才最节省空间
杨辉三角形主要的问题就是对齐不容易做到

5 楼

这个比较简单嘛~(我是小学生,方法可能很简单)[em12][em12][em12][em12]
program tyk;
const
n=5;{这里定阶数}
var
a:array[1..n,1..n];
i,j:integer;
begin
fillchar(a,sizeof(a),0);
for i:=1 to n do a[i,1]:=1;
for i:=2 to n do begin
for j:=2 to n do begin
a[i,j]:=a[i-1,j-1]+a[i-1,j];
end;
end;
for i:=1 to n do begin
for j:=1 to n do begin
if a[i,j]<>0 then write(a[i,j]);
end;
writeln;
end;
end.
另:我没经过调试,也许不对,望指出。



6 楼

你们说得我还是不太懂
我刚学
希望大家多多指教

7 楼

program ex7;
var i,j,n:integer;
     a:array[1..34,1..34] of integer;
  begin
   read(n);
   for i:=1 to n do
   for j:=1 to n do
   a[i,j]:=0;
   for i:=1 to n do
   for j:=1 to n do
    begin
     if j=1 then a[i,j]:=1;
     if i=j then a[i,j]:=1;
     if i>=3 then a[i,j]:=a[i-1,j]+a[i-1,j-1];
    end;
  for i:=1 to n do
  for j:=1 to i do
    write(a[i,j]);
end.
谁来帮我指出这错再哪了
谢谢了[em15]

8 楼

格式错了。至少得加个writeln吧

9 楼

再哪加呀
能不能再告诉我呀
[em18]

10 楼

for i:=1 to n do
  for j:=1 to i do
    write(a[i,j]);
end.

就这部分啦……得换行,如果可以的话还要处理格式

我来回复

您尚未登录,请登录后再回复。点此登录或注册