Task 3 求最大数组和

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

(要求:输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。)
 
1.设计思想:要求出一个正负数组中的最大子数组的和,可以先找出其中的所有非负数,它们的和则是最终要求的数值。
  所以就要利用for循环生成一个随机数组,数值为-100到100之间的整数,然后用一个if语句判断随机数是否是非负数,如果是就   在sum的   值上加上这个数,最后得到的数组之和就是要找的值。
2.源代码:
#include <iostream>
#include <time.h>
using namespace std;

void main()
{
    int arr[200];
    int sum = 0;
    srand((unsigned)time(NULL));
    cout << "生成的数组为:"<< endl;
    for (int i = 0;i < 200; i++)
    {
        arr[i] = rand()%201-100;//生成一个随机数组
        cout << arr[i] << "   ";
        if (arr[i] >= 0)//找出所有非负数将其相加
        {
            sum = sum + arr[i];
            cout << arr[i];
        }
    }    
    cout << endl;
    cout << "该数组的子数组和的最大值为:" << sum << endl;
}

3.测试结果:

4.项目计划总结表:

posted @ 2015-03-22 21:51  mengxiangjialzh  阅读(155)  评论(1编辑  收藏  举报