码迷,mamicode.com
首页 > 编程语言 > 详细

软件工程概论返回一个最大子数组的和延伸

时间:2015-03-28 23:06:53      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:

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

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

结对开发作者图片

技术分享

 

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

 

软件工程概论返回一个最大子数组的和延伸

标签:

原文地址:http://www.cnblogs.com/15732115368zhm/p/4374931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!