一 ,要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
二,设计思路:
本次实验设计设定的数组长度为10,采用随机数避免键盘输入,用动态规划算法实现。
三,代码实现:
1 #include <iostream> 2 #include<stdlib.h> 3 #include<time.h> 4 using namespace std; 5 6 int main() 7 { 8 int i; 9 int a[10]; 10 int max = 0; 11 int b = 0; 12 13 srand(time(NULL)); 14 cout<<"数组为:"; 15 for (i = 0; i<10; i++) 16 { 17 a[i] = rand() % 201-100; //随机生成-10 到 10的整数 18 } 19 for (i = 0; i<10; i++) 20 { 21 cout << a[i] << " "; 22 } 23 cout << endl; 24 25 for (i = 0; i < 10; i++) 26 { 27 b += a[i]; 28 if (b < 0) 29 b = 0; 30 if (b > max) 31 max = b; 32 } 33 if (max == 0) 34 { 35 max = a[0]; 36 for (i = 0; i < 10; i++) 37 { 38 if (max < a[i]) 39 { 40 max = a[i]; 41 } 42 } 43 } 44 cout <<"最大子数组为:"<< max << endl; 45 system("pause"); 46 return 0; 47 }
四、运行截图
五、结对开发感想
队友可以在自己卡壳的时候给以思想上的疏通,当思路不清晰时通过讨论可以是双方的思路都清晰起来,不但能够加深对代码的印象,还能对代码的编写提供更清晰的思路,使编程的效率提高。
六、真相图