数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 4583|回复: 9

杨辉三角形的程序实现

[复制链接]
b
发表于 2004-5-28 05:25:34 | 显示全部楼层 |阅读模式
<FONT face=Tahoma>(一)杨辉三角形

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

这是我国宋朝数学家杨辉在公元1261年著书《详解九章算法》里画的一张图,这便是著名的杨辉三角形。

(二)程序设计

由笔算过程已经分析出算法,可利用循环控制变量算出。我们除掉最上层仅有一个数字的1,其下算做第一行,依次可递推至任意N行。可随机输入要算的N行数字置入数组M(15)中,而后赋给数组IM(90)。输出数组IM(90)时,形象地打印出三角形的层次和各行各位的数字,并打印汉语拼音“杨辉三角形”。本程序设计最多为12行。

FORTRAN语言源程序:

INTEGER M(15),IM(90)

WRITE (*,10)

10 FORMAT(10X,22HYang-Hui San Jiao Xing/5X,’N

READ(*,20)N

20 FORMAT(I2)

JJ=0

DO 44 I=1,N

DO 30 L=1,N

M(L)=0

30 CONTINUE

K=1

M(1)=1

L=I+1

DO 50 J=1,L

K=K*(I-J+1)/J

M(J+1)=K

50 CONTINUE

DO 40 IJ=1,L

JI=JJ+IJ

IM(JI)=M(IJ)

40 CONTINUE

JJ=JJ+L

44 CONTINUE

WRITE(5,60) (IM(I),I=1,JJ)

60 FORMAT(33X,2I6/,30X,3I6/,28X,4I6/,25X,5I6/,22X,6I6/,

1 19X,7I6/,16X,8I6/,13X,9I6/,10X,10I6/,7X,11I6/,4X,12I6/,

2 1X,13I6/)

END

BASIC语言源程序:

10 DIM m(15): DIM im(90)

20 PRINT "Yang-Hui San Jiao Xing"

30 INPUT n

40 jj = 0

50 FOR i = 1 TO n

60 FOR l = 1 TO n

70 m(l) = 0

80 NEXT l

90 k = 1: m(1) = 1

100 l = i + 1

110 FOR j = 1 TO l

120 k = k * (i - j + 1) / j

130 m(j + 1) = k

140 NEXT j

150 FOR ij = 1 TO l

160 ji = jj + ij

170 im(ji) = m(ij)

180 NEXT ij

190 jj = jj + l

200 NEXT i

210 j = 1

220 FOR i = 1 TO n

230 FOR k = 1 TO i + 1

240 PRINT TAB(30 - i * 3 + k * 6); im(j);

250 j = j + 1

260 NEXT k

270 PRINT

280 NEXT i</FONT>
<>
<><FONT style="FONT-SIZE: 12px; FONT-FAMILY: MS Shell Dlg, Tahoma, sans-serif, 宋体">__________________
</FONT></P>
发表于 2004-10-26 18:57:21 | 显示全部楼层
<>能不能</P><>这样打印结果</P><>                              1 </P><P>                        1              1</P><P>                   1        2                    1</P><P>             1       3            3                       1</P>
发表于 2004-10-26 18:59:55 | 显示全部楼层
<>我的同学已经作出来了</P><>效果还不错</P><>用的是c语言编程</P>
发表于 2004-11-14 04:33:00 | 显示全部楼层
<>晕怎么还是有行号的basic啊!~~</P><>这个我小学三年级就编过了 长沙市的小学计算机比赛题!~</P>
发表于 2004-11-21 10:51:40 | 显示全部楼层
[em49]
发表于 2004-11-23 04:36:54 | 显示全部楼层
<>三楼的兄弟,为什么不拿出来和大家共同享受呢?</P>
发表于 2004-11-23 16:54:38 | 显示全部楼层
<>杨辉三角,当时我们学编程语言时,用的是</P><>pascal编的</P><>现在好像编程语言都用c了</P>
发表于 2004-12-9 01:39:23 | 显示全部楼层
<>C++实现的</P><>#include &lt;iostream.h&gt;
#define Max 100
main()
{
int n;
cin&gt;&gt;n;
int i,j,c,a[Max],b[Max];
for (i=1;i&lt;=Max;i++) {b=0;a=0;}
a[1]=1;
for (i=1;i&lt;=n;i++)
{
  c=a[0];
  for (j=1;j&lt;=n-i;j++) cout&lt;&lt;"  ";
  for (j=1;j&lt;=i;j++)
  {
   b[j]=a[j]+c;
   cout&lt;&lt;b[j];
   if (b[j]&lt;10)
    cout&lt;&lt;"   ";
   else if (b[j]&lt;100)
    cout&lt;&lt;"  ";
   else if (b[j]&lt;1000)
    cout&lt;&lt;" ";
   else cout&lt;&lt;"";
   c=a[j];a[j]=b[j];
  }
  cout&lt;&lt;endl;
}
return(0);
}
</P>
发表于 2004-12-27 03:13:19 | 显示全部楼层
<>我用VB和Pascal都做过,很简单。过会儿调出来。</P>
发表于 2004-12-27 04:08:27 | 显示全部楼层
<>本人用Pascal编的,做法如下:</P><>var
  a:array[1..100] of integer;
  c:array[1..100] of integer;
  i,m,f,j:integer;
begin
  readln(i);
  c[1]:=1;
  for f:=1 to i do begin
    write(' ':2*(i-f+1));
    a[f]:=1;
    for j:=2 to f do begin
      a[j]:=c[j]+c[j-1];
    end;
    for j:=1 to f do begin
      write(a[j]:4);
      c[j]:=a[j];
    end;
    writeln;
  end;
  readln;
end.</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 18:24 , Processed in 0.062963 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表