• 软件工程个人作业4(课堂练习&&课堂作业)


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

    要求:1、输入一个整型数组,数组里有正书和负数。

             2、数组中连续的一个或者多个整数组,每个子数组都有一个和。

             3、求所有子数组的和的最大值。要求时间复杂度为0(n)。

    设计思想:

    1、定义一维数组,为实现可以输入任意多个值在此处用到vectors容器。

    2、输入

    3、实现方法:从两头进行。以数组的前端为例,比较下标为0与下标为1的两个元素进行比较选择,若下标为0的元素的数值小于0则直接舍弃,若大于零则将该元素的值与下标为1的元素相加并赋值给下标为1的元素,在进行循环。

    程序代码:

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int t;
        int a;
        int max;
        vector<int>ivec1;//创建vector对象
        vector<int>::size_type iz;//数组的程度为iz;
        cout << "请输入一组数:" << endl;
        while(cin>>a)
        {
            ivec1.push_back (a);
            if(getchar()=='
    ')
                break;
        }
        
        iz=ivec1.size();
        cout << "数字元素的个数:" << iz << endl;
        
        for(int i = 0;i < iz/2;i++)
        {
            if(ivec1[i] < 0)
            {
                t = ivec1[i+1];
            }
            if(ivec1[i] > 0)
            {
                t = ivec1[i] + ivec1[i+1];
            }
            ivec1[i+1] = t;
        }
        for(int i = iz-1;i > iz/2+1;i--)
        {
            if(ivec1[i] < 0)
            {
                t = ivec1[i-1];
            }
            if(ivec1[i] > 0)
            {
                t = ivec1[i] + ivec1[i-1];
            }
            ivec1[i-1] = t;
        }
        
        if(ivec1[iz/2]>=0)
        {
            max = ivec1[iz/2] + ivec1[iz/2+1];
        }
        else 
            max = ivec1[iz/2+1];
        cout << "最大"<< max ;
        return 0;
    }

    运行结果截图:

    反思总结:这个程序仅仅是考虑了最大值时正数的情况;

    遇到的问题:
    1、随意输入任意个整型数字(用vectors容器)
    2、定义变量max比较存储最大值(开始被忽略了)
    3、筛选时要从两头进行。

    4、有些情况不能正常运行。

          

  • 相关阅读:
    千千静听被拖到桌面之外的解决办法
    Excel学习(二)快速添充单元格
    tomcat中的server.xml中关于虚拟目录的设定
    配置SVN
    DataTable.Select() 方法的简单用法
    Excel学习(一) 单元格显示下拉列表框
    Excel学习(三)添加打印预览按钮
    打造自己的资料库
    APAHCE基于IP端口的虚拟主机的设定
    反射
  • 原文地址:https://www.cnblogs.com/huangliping/p/5364161.html
Copyright © 2020-2023  润新知