回复 9楼 花脸
明白了~那个输出图原型是一个金字塔~不过打印数据时移位了~那题答案是30~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
程序代码:#include<stdio.h>
void creat(int a[][25],int n);
void print(int a[][25],int n);
int get_max(int b[],int n);
int fun(int a[][25],int n);
int main()
{
int a[25][25]={0};
int n=0;
scanf("%d",&n);
creat(a,n);
print(a,n);
printf("\n%d\n",fun(a,n));
return 0;
}
void creat(int a[][25],int n)
{
int i=0;
int j=0;
for (i=0;i<n;++i)
for (j=0;j<=i;++j)
scanf("%d",&a[i][j]);
}
void print(int a[][25],int n)
{
int i=0;
int j=0;
puts("");
for (i=0;i<n;++i)
{
for (j=0;j<=i;++j)
printf("%-3d",a[i][j]);
puts("");
}
}
int fun(int a[][25],int n)
{
int sum=0;
int b[25]={0};
int c[25]={0};
int i=0;
int j=0;
int k=0;
for (i=0;i<n;++i)
{
for (j=0;j<=i;++j)
if (j==0)
c[j]=b[j]+a[i][j];
else if (j==i)
c[j]=b[j-1]+a[i][j];
else
c[j]=(b[j-1]>b[j]?b[j-1]:b[j])+a[i][j];
for (k=0;k<=i;++k)
b[k]=c[k];
}
sum=get_max(b,n);
return sum;
}
int get_max(int b[],int n)
{
int i=0;
int max=b[0];
for (i=1;i<n;++i)
if (b[i]>max)
max=b[i];
return max;
}

程序代码:#include <stdio.h>
#define N 5
int max(int a, int b) { return a > b ? a : b; }
int main()
{
int n, s[N][N], val[N + 1] = {0};
scanf("%d", &n);
for (int i = 0; i < n; ++i) for (int j = 0; j <= i; ++j) scanf("%d", &s[i][j]);
for (int i = n - 1; i >= 0; --i)
{
for (int j = 0; j <= i; ++j)
{
val[j] = s[i][j] + max(val[j], val[j + 1]);
}
}
printf("%d\n", val[0]);
return 0;
}[此贴子已经被作者于2017-3-13 10:14编辑过]
