初学代码,处理的不好的地方见谅,已经AC
#include<stdio.h>
#include<math.h>
#define max(a,b)(((a)>(b))?(a):(b));//定义max函数
int main()
{
int x[100][100];
int a,b,i,j,n;
scanf("%d",&a);//输入数塔的个数
while(a!=0)
{
a=a-1;
scanf("%d",&b);//输入数塔的层数
for(i=0;i<b;i++)
{
for(j=0;j<=i;j++)
{
scanf("%d",&x[i][j]);
}
}//输入数塔的数据
for(i=b-2;i>=0;i--)
{
for(j=0;j<=i;j++)
{
n=max((x[i+1][j]),(x[i+1][j+1]));
x[i][j]=x[i][j]+n;
}
}//计算父节点与较大子节点的值
printf("%d\n",x[0][0]);
}
}
由于自顶向下降低阶数会导致数塔分裂成多个数塔,所以选择自底向上方法