1.要求程序必须能处理1000个元素; 2.每个元素是int32类型的,出现子数组之和大于整型表示的最大范围会出现什么情况; 3.输入一个整形数组,数组里面既有正数也有负数; 4.数组中连续的一个或多个整数组成一个字数组,每个子数组都有一个和; 5.求所有子数组的和的最大值,要求时间复杂度为O(n)。 设计思想: 1.随即生成数组(含有正数和负数)。 2:求所有子数组,按数组长度进行数组的划分。 3:计算:从第一个数开始做加法,若和大于第二个数,则继续加下一个数(若加上第三个数的和大于第三个数则重复进行此操作;小雨滴三个数,则舍掉前面的所有数,并继续重复进行此操作);若小于第二个数,则舍掉第一个数。 出现的问题: 1.在生成随机数的时候,正负数没有一起生成。 2.在值大的时候会出现意外报错,程序不够完美。 3.关于两个人如何分配任务不够明确影响了进度。
源代码:
#include<time.h> using namespace std; int main() { int i; int a[1000]; int max = 0; int b = 0; srand(time(NULL)); cout<<"数组为:"<<endl; for (i = 0; i<1000; i++) { a[i] = rand()%2001-1000; } for (i = 0; i<1000; i++) { cout << a[i] << '\t'; } cout << endl; for (i = 0; i < 1000; i++) { b += a[i]; if (b < 0) b = 0; if (b > max) max = b; } if (max == 0) { max = a[0]; for (i = 0; i < 1000; i++) { if (max < a[i]) { max = a[i]; } } } cout <<"最大子数组为:"<< max << endl; system("pause"); return 0; }
运行截图:
总结:本次作业由两个人完成,提高了两个人的默契,同时本次作业也提高了自己的能力,学会了沟通