/*关于子数组,就是对于一个数组,例如int A[]=2,-3,4,6,-2,4,-6,0,1 选择任意个数字,就是他的子数组,例如4,6就是他的一个子数组,而且是和最大的一项 2011.1.25 漯河 */ #include<iostream> using namespace std; template<typename T> T SelectMaxChildArray(T* Array,int Length,int &Left,int &Right) { T Sum=0; T MaxChild=0; for(int i=0;i<Length;++i) { Sum+=Array[i]; if(Sum<0) { Sum=0; Left=i+1; //左下标从该位置的下一个位置开始 } if(MaxChild<Sum) { MaxChild=Sum; Right=i; } } //如果所有选择的子数组和都小于0,那么选择数组中最大的那个元素做为子数组唯一的值 if(MaxChild==0) { MaxChild=Array[0]; for(int i=0;i<Length;++i) { if(Array[i]>MaxChild) { Left=Right=i; MaxChild=Array[i]; } } } return MaxChild; } void main() { int A[]={1, -2, 3, 10, -4, 7, 2, -5}; double B[]={1.4,34.65,-12.9,33.7,-19.2,3.02,55.32,-3.9}; int Left,Right; int Sum=SelectMaxChildArray(A,8,Left,Right); cout<<"数组下标区间是:"<<Left<<"到"<<Right<<endl; cout<<"最大子数组和是:"<<Sum<<endl; Left=Right=0; double Sum1=SelectMaxChildArray(B,8,Left,Right); cout<<"数组下标区间是:"<<Left<<"到"<<Right<<endl; cout<<"最大子数组和是:"<<Sum1<<endl; system("pause"); }