回 帖 发 新 帖 刷新版面

主题:哪位高手帮我解一个扬辉三角问题

杨辉三角是由二项展开式的系数所排成的三角形。

请找出它的规律,并尝试用框图描述它的算法。最好加上PASCAL编程 加分

回复列表 (共6个回复)

沙发

program yhsj;
  var
    line,line2:array[0..121] of byte;
    i,j,n:byte;
  procedure space(n:byte);
    var i:byte;
  begin
    for i:=1 to n do write(' ');
  end;
begin
  fillchar(line,sizeof(line),0);
  line[1]:=1;
  readln(n);
  for i:=1 to n do begin
    space((n-i)*2);
    for j:=1 to i do write(line[j]:4);writeln;
    for j:=1 to i+1 do line2[j]:=line[j-1]+line[j];
    line:=line2;
  end;
  readln;
end.

注:n为打印的行数

板凳

如果你要的行数太多请修改程序,向文件里输出。

3 楼

program triangle;
function yh(i, j: longint): longint;
begin
  if (j = 1) or (j = i) then
    yh := 1
  else
    yh := yh(i - 1, j - 1) + yh(i - 1, j);
end;
var
  n, i, j: integer;
begin
{  assign(input, 'triangle.in');
  assign(output, 'triangle.out');
  reset(input);}
  read(n);
{  close(input);
  rewrite(output);}
  for i := 1 to n do
  begin
    write('1');
    for j := 2 to i do
      write(' ', yh(i, j));
    writeln;
  end;
{  close(output);   }
end.

4 楼

program jzt;
var yh:array[1..10,1..10]of integer;
      i,j,n,t:integer;
begin
  writeln('n=');
  readln(n);
  yh[1,1]:=1;  {设置第一行的值}
  for i:=2 to n do   {设置2~n行的值}
    begin
      yh[i,1]:=1;yh[i,i]:=1;  {设置首尾值}
      for j:=2 to i-1 do
            yh[i,j]:=yh[i-1,j-1]+yh[i-1,j];  {设置非首尾值}
    end;
   writeln;
   for i:=1 to n do
      begin 
          write(' ':56-i);   {从屏幕正中开始打印}
          for t:=1 to n do
          for j:=1 to i do write(yh[i,j]:n-t+1);   {打印对齐}
          writeln;
      end;
end.

5 楼

用递推,很快就出来了.

6 楼

我给你两种算法
1……

program text;
var
  a:array[1..5,1..5]of integer;
  n,i,j:integer;
begin
  repeat
    write('input n=');
    readln(n);
  until n<=5;
  for i:=1 to n do
  begin
    a[i,1]:=1;
    for j:=2 to i do
      a[i,j]:=0;
  end;
  for i:=2 to n do
    for j:=2 to i do
      a[i,j]:=a[i-1,j-1]+a[i-1,j];
  for i:=1 to n do
  begin
    for j:=1 to i do
      write(a[i,j],' ');
    writeln;
  end;
  readln;
end.


2……

program text;
var
  a:array[1..5,1..5]of integer;
  n,i,j:integer;
begin
  repeat
    write('input n=');
    readln(n);
  until n<=5;
  for i:=1 to n do
  begin
    for j:=1 to i do
      if (j=1)or(i=j) then
      begin
        a[i,j]:=1;
        write(a[i,j],' ');
      end
      else
      begin
        a[i,j]:=a[i-1,j-1]+a[i-1,j];
        write(a[i,j],' ');
      end;
    writeln;
  end;
  readln;
end.


我的这个程序还有问题,我规定输出行数不超过5行,因为超过的话,后面的两位数,与前面的一位数显示不整齐,你可以自己修改一下

我来回复

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