题目:求一数组中最大子数组的和
程序代码:
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int Array[100]; //定义数组 6 int length; //数组长度 7 for(length=0;;) //输入数组 遇到Enter即为输入完 8 { 9 cin>>Array[length]; 10 length++; 11 if(getchar()==‘\n‘) 12 { 13 break; 14 } 15 } 16 int maxSumOfArray,maxSum; 17 maxSumOfArray=maxSum=Array[0]; 18 //当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。 19 //如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。 20 for(int i=1;i<length;i++) 21 { 22 maxSumOfArray=max(maxSumOfArray+Array[i],Array[i]); //变量maxSumOfArray 为包含Array[i] 与Array[i] 取最大 23 maxSum=max(maxSum,maxSumOfArray); ////变量maxSum 为maxSum 与 maxSumOfArray 取最大 24 } 25 cout<<"最大子数组和:"<<maxSum<<endl; 26 return 0; 27 }
运行结果:
总结:
这道题难得地方在于对这种算法的理解,明白了其中的道理,就学会了这种阶梯思路。
小伙伴博客地址:http://www.cnblogs.com/L-Damon-v/p/5317035.html
原文:http://www.cnblogs.com/cnyulei/p/5321912.html