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


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

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

    结对开发作者图片

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

  • 相关阅读:
    贝塞尔曲线
    那些有内容的文章——记录网址
    Mac 下 SVN 的使用
    让时间不再随系统设置而改变
    iOS 关闭图片渲染
    iOS的AssetsLibrary框架访问所有相片
    iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
    Linux 第一次学习笔记
    java第四次实验报告
    java第三次实验报告
  • 原文地址:https://www.cnblogs.com/15732115368zhm/p/4374931.html
Copyright © 2020-2023  润新知