主题:哪位高手帮我解一个扬辉三角问题
djj018
[专家分:0] 发布于 2006-07-08 15:55:00
杨辉三角是由二项展开式的系数所排成的三角形。
请找出它的规律,并尝试用框图描述它的算法。最好加上PASCAL编程 加分
回复列表 (共6个回复)
沙发
小田甜ts [专家分:210] 发布于 2006-07-08 16:33:00
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为打印的行数
板凳
小田甜ts [专家分:210] 发布于 2006-07-08 17:06:00
如果你要的行数太多请修改程序,向文件里输出。
3 楼
封天怒龙 [专家分:160] 发布于 2006-07-17 15:20:00
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 楼
jzyaa [专家分:10] 发布于 2006-07-18 13:34:00
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 楼
游侠UFO [专家分:1200] 发布于 2006-07-19 20:26:00
用递推,很快就出来了.
6 楼
PascalCon [专家分:30] 发布于 2006-07-23 15:56:00
我给你两种算法
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行,因为超过的话,后面的两位数,与前面的一位数显示不整齐,你可以自己修改一下
我来回复