整数数组中最大子数组求和01

程序思路:

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 << "请输入数组个数\n";
13     cin >> m;
14     cout << "输入一个整数数组,包含正负数\n";
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 }
View Code

 测试截图:

此次结对编程队友为 李娜。

posted on 2016-03-26 16:03  狞_JML  阅读(188)  评论(1编辑  收藏  举报

导航