#include<iostream>
2 #include<string>
3 #include<ctime>
5 #define N 5
6 using namespace std;
7
8 int MaxSum(int *arr, int size)
9 {
10 int i, sum, max1, max2, dp,min;
11 dp = max1 = arr[0];
12 for (i = 1; i < size; ++i)//非環形數組;++i,先i自加1,再使用i的值
13 {
14 if (dp < 0)
15 dp = arr[i];
16 else
17 dp += arr[i];
18 if (dp > max1)
19 max1 = dp;
20 }
21 sum = min = dp = arr[0];
22 for (i = 1; i < size; ++i)//求數組最小子數組和,再用數組全部元素和減去,則結果跨過arr[n-1]到arr[0]
23 {
24 if (dp>0)
25 dp = arr[i];
26 else
27 dp += arr[i];
28 if (dp < min)
29 min = dp;
30 sum += arr[i];
31 }
32 max2 = sum - min;//數組全部元素和減去最小子數組
33 return max1>max2 ? max1 : max2;//三目運算符;如果max1>max2,将max1的值傳回,否則傳回max2
34 }
35 int main()
36 {
37 int arr[N];
38 srand(time(0));
39 cout << "随機數組為:" << endl;
40 for (int j = 0; j < N ; j++)
41 {
42 arr[j] = rand() % 20 - 10;
43 cout << arr[j] << " ";
44 }
45 cout << endl;
46 cout << "最大子數組的和為:" << MaxSum(arr, N) << endl;
47 return 0;
48 }
思想将一位數組程式設計成一個環,将數組累加一遍,然後把第一位數放在最後一位在累加 最後比較大小