求教:同一个问题两个程序求高人指点。
题目:输入一个三角形矩阵,第一行一个数,第二行两个数,第N行N个数.最后一行相邻两个数字分别与左上角和右上角的同一个数相加,和最大的赋给上一行那个被加数,求三角形顶端最后的值是多少。
Sample Input
1/*表示测试数据有几组*/
5/*三角矩阵行数*/
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
样例倒推的过程
7 7 7 7
3 8 3 8 3 8 ----> 23 21 ---> 30
8 1 0 ---> 8 1 0 ---> 20 13 10
2 7 4 4 7 12 10 10
4 5 2 6 5
我的代码一:
#include"stdio.h"
#include"math.h"
int a[10000];
int main()
{int n,i,j,b;
scanf("%d",&j);/*测试数据组数*/
while(j--)
{scanf("%d",&n);
for(i=1;i<=n*(n+1)/2;i++)
scanf("%d",&a[i]);/*如果行数是n是五,则有5*6/2个元素*/
while(n)
{for(b=0;b<n-1;b++)
{
a[(n)*(n+1)/2-n-b]=max((a[n*(n+1)/2-n-b]+a[n*(n+1)/2-b]),(a[n*(n+1)/2-n-b]+a[n*(n+1)/2-b-1]));/*请问max函数是这样调用的吗?*/
}
n--;}
printf("%d\n",a[1]);
}
}
与代码一差不多,用的二维数组,代码二也有问题,如下:
#include"stdio.h"
#include"math.h"
int a[100][100];
int main()
{int a,n,i,j;
scanf("%d",&a);
while(a--)
{scanf("%d",&n);
for(i=0;i<5;i++)
{ for(j=0;j<=i;j++)
scanf("%d",&a[i][j]);}/*这里编译不能通过不知道为什么,二维数组不可以这样赋值么?*/
while(n--)
{
for(i=3;i>=0;i--)
{ for(j=i;j>=0;j--)
a[i][j]=max(a[i+1][j]+a[i][j],a[i+1][j+1]+a[i][j]);
}
}
printf("%d\n",a[0][0]);
}
}