View Code of Problem 65

#include <stdio.h>
int main()
{
	int t,r,i,j;
	scanf("%d",&t);
	while(t--)     //用t当做是程序退出的条件;
	{
		int a[1000][1000];  //数组开在while的里面每次循环都需要用一个新的数组;
		scanf("%d",&r);     //用r表示行的数目
		for(i=0;i<r;i++)
		{
			for(j=0;j<=i;j++)   //循换退出判断条件:j<=i 第一行一个数 第二行两个数 第三行三个数。。。。
			{
				scanf("%d",&a[i][j]);
			}
		}
		for(i=r-1;i>=0;i--)   //i=r-1: 从金字塔的底层开始循环
		{
			for(j=0;j<i;j++)
			{
				if(a[i][j]>a[i][j+1])  //从底层开始判断 找出子树的根节点的两个子节点中最大的 然后加到根节点上
				{
					a[i-1][j]=a[i][j]+a[i-1][j];
				}
				else
				{
					a[i-1][j]=a[i][j+1]+a[i-1][j];
				}
			}
		}
		printf("%d\n",a[0][0]);
	}
	return 0;
} 

Double click to view unformatted code.


Back to problem 65