zoukankan      html  css  js  c++  java
  • 软件工程课后作业:返回一个整数数组中最大子数组的和

     
    1、题目:返回一个整数数组中最大子数组的和。
    2、要求:
      要求程序必须能处理1000 个元素;
      每个元素是int32 类型的;
      输入一个整形数组,数组里有正数也有负数。
      数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
      求所有子数组的和的最大值。要求时间复杂度为O(n)。
    3、设计思路:
      将数组大小定义为1000,对于每个元素定义为int32类型,将求和函数设置为int 类型,这样可以方便观测数据的溢出,让数组元素可以超出范围。
    4、程序代码:
    #include<iostream>
    #include<time.h>
    #include<conio.h>
    #define N 1000
    using namespace std;
    void RandIn(int IntNum,int A[])   //随机生成数组
    {
        cout<<"整数内容"<<endl;
        for(int i=0;i<IntNum;i++)
        {
            A[i]=rand()-rand();
            cout<<A[i]; 
            if(i%15==4)
                cout<<endl;
            else
                cout<<' ';
        }
    }
    void SelMax(int IntNum,int A[],auto &sum)
    {
        int buffer=0;
        int count1=0;        //求和的数值个数
        int count2=0;    //进行的运算次数
        for(int j=0;j<=IntNum;j++)
        {
            if(j==IntNum)
            {
                j=0;
            }
            buffer+=A[j];
            count1++;
            count2++;
            if(buffer<0)   
            {
                buffer=0;
                count1=0;
            }
            if(sum<buffer)//sum始终记录下存在的最大和
            {
                sum=buffer;
            }
           
            {
                break;
            }
        }
    }
    void main()
    {
        
        int IntNum;
        int A[N];
        int q=0;
        while(q==0)
        {
            auto sum=0;
            srand((unsigned)time(NULL));
            cout<<"请输入数组元素的个数:";
            cin>>IntNum;
            RandIn(IntNum,A);
            SelMax(IntNum,A,sum);
            cout<<endl;
            cout<<sum<<endl;
            cout<<"是否继续测试(输入0则继续否则停止)";
            cin>>q;
            system("cls");
        }
    }
    5.运行结果
         无溢出时:

    溢出时:对代码进行改动,在求和代码函数中*4294967296(也就是2的32次方)   这样在运行程序之后就会溢出,截图如下:

    6、实验感想:  通过这次实验,我对程序分析和代码编程有了稍微深刻的印象,更加熟悉了这些流程,同时对上一课课堂老师讲的单元测试、代码测试有了进一步的认识,在进行不算短的代码编程时,应用代码测试看起来费力气,其实在后续工作中能够非常的方便检查错误,并且及时改正。否则代码一旦过长,根本找不到其中的错误出在哪儿。以后我会在编写较长的代码时每次应用单元测试。

    7、小组合照:

  • 相关阅读:
    交互原型设计软件axure rp学习之路(一)
    charles关于手机APP抓包
    Charles常见问题汇总
    转: Charles 从入门到精通
    深度理解《正则表达式》
    monkey无规则压力测试
    go语言几个最快最好运用最广的web框架比较
    html 生成印章
    通过URI协议实现浏览器调用手机app
    基于GitLab+Jenkins的DevOps赋能实践
  • 原文地址:https://www.cnblogs.com/haodong9/p/9786825.html
Copyright © 2011-2022 走看看