1.设计思想:测试数组长度的最大范围,测试每个元素是int32 类型的,将数组的长度设为2,第一个数字输入最大位数的数字,查看结果。
2.出现的问题:
测试1000个元素,
测试1000个元素程序没有问题,但是当测试1000000个元素时,程序运行时间过长,时间复杂度过大。
当子数组的和超过最大范围时,结果为0。
3.解决方案:1.如果用户输入超过最大范围,提示用户重新输入或者计算机抛出异常。
2.将数组定义为长整型的。
3.将结果存入数组。
4.源代码
//郭婷 信1305 20132916 2015/3/20 #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; //maxsofar记录到目前为止的的最大值 int maxendinghere = 0; //maxendinghere记录从当前位置开始往前几个连续的数的和的最大值 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 << "Error: memory could not be allocated"; return 1; } //srand((unsigned)time(NULL)); for (i = 0; i < n; i++) cin >> a[i]; /*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; }
5.总结
原来写完一个程序,总觉得运行成功之后就不会有什么错误,也没有更广、更深的思考,通过这节课的学习,我知道了原来每个程序都有自己所不能涉及的范围,超过了既定的范围就会出现错误,而这些错误往往被我们忽略。所以以后写程序一定要考虑各种情况,可能出现的各种问题以及解决的问题。
结对伙伴:
郭婷 朱慧敏
原文:http://www.cnblogs.com/gting/p/4374908.html