求整数组里最大子数组的和

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

思路:先根据用户输入的随机数来判断输入数的个数,形成一个数组,再利用动态数组,求最大子数组之和,对每个数有两种情况,这个数前边的子数组和为负数,或者为正数,然后,如果是正数,判断加上自身是否更大,最后进行递归运算。

代码:

#include<iostream>
#define N 1000
using namespace std;
int max(int a, int b)
{
    if (a > b)
    {
        return a;
    }
    else
    {
        return b;
    }
}

int main()
{
    int Array[N];
    int i, length = 0,t=0;
    int sumOfArray;
    int sum = 0;
    cout << "请输入任意整数" << endl;
    if (getchar() == '
')
    {
        cout << "输入的数组为空" << endl;
        t = 1;
        cout << "请输入非空数组" << endl;
    }
    for (length = 0;;)
    {
        cin >> Array[length];
        length++;
        if (getchar() == '
')
        {
            break;
        }
    }
    cout << "这个数组的长度为:" << length << endl;
    sumOfArray = Array[0];
    for (i = 1; i<length; i++)
    {
        sum = max(sum, sumOfArray);
        sumOfArray = max(sumOfArray + Array[i], Array[i]);
    }
    sumOfArray = max(sum, sumOfArray);
    cout << "这个整数组的子数组之和的最大值为:" << sumOfArray << endl;
    return 0;
}

测试结果:

开发流程:
日期和任务
听课 看书 网上查资料 编程 日总计
周一 2     1 3
周二         0
周三   2     2
周四 2   1 2 5
周五     1 3 4
周六   1 2 1 5
周日         0
总计 4 3 4 7 18
日期
开始时间 结束时间 中断时间 净时间 活动 备注
3/21 14:00 15:00 10 110 听课 软件工程课
  16:30 17:30 0 60 编程 想思路
3/23 15:00 17:00 20 100 看书 读《构建之法》
3/24 14:00 15:50 10 100 听课 软件工程课
  19:00 21:00 20 100 结对编程 交流思想
3/25 8:30 9:30 0 60 上网查资料 整理思路
  16:30 17:30 0 60 编程 编写代码
  19:30 21:30 20 100 结对开发 领航,查错
3/26 10:00 11:00 0 60 调试代码 检查问题
  14:00 16:00 20 100 写博客 总结
  19:30 20:30 0 60 看书 预习

缺陷记录日志:

一开始对动态数组不是很了解,不知道如何运用,后来在老师和同学的帮助下,明白并掌握了,觉得动态数组这种思想很重要。

程序的不足:

对一些特别大的数进行测试时可能会报错。

队友博客:http://home.cnblogs.com/u/apan008/

原文地址:https://www.cnblogs.com/lvstudy/p/5320615.html