软件工程概论---最大子数组的和延伸

题目:返回一个整数数组中最大子数组的和

延伸要求: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或其他范围更广的类型。老师举例医院的医疗保险系统,将查询显示年的内容划分成按月显示的,缩小了显示范围,减少了显示内容,就避免了内容溢出。也就是通过控制时间复杂度来控制程序可运算的范围。个人感觉老师的方法是挺有技巧的。

结对开发作者图片

 

总结:结对开发锻炼我们的合作能力,郭婷的程序比较标准,所以就测试的这个程序。由她的程序,我可以看到我在编程方面确实不是很标准,而且我的程序适用范围小,相比于较标准程序还是欠缺很多。我感觉合作会使我学到自己的不足,让自己的程序更加标准化,不那么”小家子气“。

 

posted @ 2015-03-28 22:10  so#what  Views(202)  Comments(0Edit  收藏  举报