软件工程个人作业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()=='\n')
            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、有些情况不能正常运行。

      

posted @ 2016-04-07 16:31  Huangliping  阅读(138)  评论(0编辑  收藏  举报