程序思路:
1.假如a[i]前面的和小于0,就把暂存的和清0(因为负数+a[i]会把a[i]值拉低)
2.假如暂存的和大于最大和MaxSum,就将这个和给MaxSum(MaxSum储存子数组最大和)
3.如果MaxSum值为0,说明它的初始值一直没变过,即:没有正数!所以就找整个数组最大那个数
代码:
1 //返回一个整数数组中最大子数组的和 2 #include<iostream> 3 using namespace std; 4 5 int main() 6 { 7 int sum = 0;//暂存的累加和 8 int MaxSum=0;//最大子数组和 9 int i,m=1; 10 int *a=new int[m];//动态数组 11 12 cout << "请输入数组个数 "; 13 cin >> m; 14 cout << "输入一个整数数组,包含正负数 "; 15 for (i = 0; i < m; i++) 16 { 17 cin >> a[i]; 18 } 19 //////////////////////////////////////////// 20 for (i = 0; i < m; i++) 21 { 22 sum += a[i];//累加 23 24 if (sum < 0) 25 { 26 sum =0;//和小于0,就不要了 27 } 28 29 if (sum > MaxSum)//如果当前累加和大于最大和 30 { 31 MaxSum = sum;//最大和为当前和 32 } 33 } 34 35 if (MaxSum == 0)//当所有元素都为负值,找最大那个 36 { 37 MaxSum = a[0]; 38 for ( i = 1; i < m; i++) 39 { 40 if (a[i]>MaxSum) 41 { 42 MaxSum = a[i]; 43 } 44 45 } 46 } 47 cout << "最大和=" << MaxSum; 48 return 0; 49 }
测试截图:
此次结对编程队友为 李娜。