题目:返回一个整数数组中最大子数组的和
延伸要求:1,程序必须能处理1000个元素,2,每个元素是int32类型的,出现子数组之和大于整型表示的最大范围会出现什么情况,3,结对开发。
成员:郭婷,朱慧敏。
测试程序代码:(郭婷程序)
#include<iostream> #include<time.h> using namespace std; #define max(a,b) ((a)>(b)?(a):(b)) int maxsum(int a[], int n) { int i; int maxsofar = 0; int maxendinghere = 0; for (i = 0; i < n; i++) { maxendinghere = max(maxendinghere + a[i], 0); maxsofar = max(maxsofar, maxendinghere); } return maxsofar; } int main() { int n, i; cout << "输入数组所包含数的个数:"; cin >> n; int *a; a = new int[n]; if (a == NULL ) { cout << "错误!"; return 1; } srand((unsigned)time(NULL)); for (i = 0; i < n; i++) { a[i] = rand() % 200 - 100; cout << a[i] << " " ; } cout << endl; int max=maxsum(a, n); cout << "最大子数组的和为:" << max << endl; delete[]a; return 0; }
输入10,0000的截图
其中,符合延伸要求1,程序能处理1000个元素。而能计算的最大范围是10,0000,在运算10,0000的时候时间就大概用了半分钟。而计算范围以外,就几乎等于死循环,运算时间太长。
解决方案:直接反应的解决方法就是把int改成longint或其他范围更广的类型。老师举例医院的医疗保险系统,将查询显示年的内容划分成按月显示的,缩小了显示范围,减少了显示内容,就避免了内容溢出。也就是通过控制时间复杂度来控制程序可运算的范围。个人感觉老师的方法是挺有技巧的。
结对开发作者图片
总结:结对开发锻炼我们的合作能力,郭婷的程序比较标准,所以就测试的这个程序。由她的程序,我可以看到我在编程方面确实不是很标准,而且我的程序适用范围小,相比于较标准程序还是欠缺很多。我感觉合作会使我学到自己的不足,让自己的程序更加标准化,不那么”小家子气“。