找出任何相邻子向量的最大和

编程珠玑上的题:

/*
* 找出任何相邻子向量的最大和
* xtfggef 2012/5/7
*/
#include<stdio.h>

int max(int a,int b)
{
	return (a>b)?a:b;
}
void main()
{

	int a[10] = {31,-41,59,26,-53,58,97,-93,-23,84};
	int maxsofar = 0;
	int maxendinghere = 0;
	for(int i=0; i<10; i++)
	{
		//遇到负数,直接赋0,相当于跳过
		//遇到大一点的数,从该数开始
		maxendinghere=max(maxendinghere+a[i],0);
		maxsofar=max(maxsofar,maxendinghere);
	}
	printf("%d\n",maxsofar);
}

仔细研究了下,好精妙的算法啊!建议读者走一遍程序,观察变化,体会细节!

你可能感兴趣的:(编程珠玑,求和)