C语言 输出数字三角形

Python010

C语言 输出数字三角形,第1张

C程序:

#include "stdio.h"

/* X:首数字,N:行数 */

void display(int X, int N)

{

int i, j

for(i=0 i<N i++)

{

/* 输出每一行的前导空格 */

for(j=0 j<N-1-i j++)

printf("   ")

/* 输出数字部分的前一半(0..i) */

for(j=0 j<=i j++)

printf("%3d", X+i+j)

/* 输出数字部分的后一半(0..i-1) */

for(j=0 j<i j++)

printf("%3d", X+2*i-1-j)

printf("\n")

}

}

void main()

{

int X, N

printf("input first figure : ")

scanf("%d", &X)

printf("input rows : ")

scanf("%d", &N)

display(X, N)

}

运行测试:

对于这一问题,很容易想到用枚举的方法(深度搜索法)去解决,即列举出所有路径并记录每一条路径所经过的数字总和。然后寻找最大的数字总和,这一想法很直观,很容易编程实现其程序如下:

program

sjx

const

maxn=10

var

a:array[1..maxn,1..maxn]

of

integer

max:longint

n,i,j:integer

fname:string

inputf:text

procedure

try(x,y,dep:integersum:longint)

begin

if

(dep=n)

then

begin

if

sum>max

then

max:=sum

exit

end

try(x+1,y,dep+1,sum+a[x+1,y])

try(x+1,y+1,dep+1,sum+a[x+1,y+1])

end

begin

readln(fname)

assign(inputf,fname)

reset(inputf)

readln(inputf,n)

for

i:=1

to

n

do

for

j:=

1

to

i

do

read(inputf,a[i,j])

max:=0

try(1,1,1,a[1,1])

writeln(max)

end.

但是当行数很大时,当三角形的行数等于100时,其枚举量之大是可想而知的,用枚举法肯定超时,甚至根本不能得到计算结果,必须用动态规划法来解。