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.总结
原来写完一个程序,总觉得运行成功之后就不会有什么错误,也没有更广、更深的思考,通过这节课的学习,我知道了原来每个程序都有自己所不能涉及的范围,超过了既定的范围就会出现错误,而这些错误往往被我们忽略。所以以后写程序一定要考虑各种情况,可能出现的各种问题以及解决的问题。
结对伙伴:
郭婷 朱慧敏