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

源代码

#include

#define n 1000

using namespace std;

void main()

{

    int a[n], b[n][n]; int length, i, j, w = 0, p = 0, q = 0, temp, m;

    cout << "输入随机整数" << endl;

    for (length = 0;;)

    {

        cin >> a[length];

        length++;

        if (getchar() == '\n')

        {

            break; } } cout << "这个数组的长度为:" << length << endl;

    for (i = 0; i

    {

        m = i;

        w = 0;

        j = 0;

        while (j <= length - 1)

        {

            w += a[m];

            b[i][j] = w;

            m++;

            if (m>length - 1)

            {

                m = 0;

            }

            j++;

        }

    }

 

    temp = b[0][0];

    for (i = 0; i

    {

        for (j = 0; j

        {

            if (b[i][j]>temp)

            {

                temp = b[i][j];

                p = i;

                q = j;

            }

        }

    }

 

    cout << "最大子数组的值为:" << temp << endl;

    i = 0;

    while (i <= q)

    {

        cout << p << " ";

        p++;

        if (p >= length)

        {

            p = 0;

        }

        i++;

    }

 

    cout << endl;

}

运行结果截图

返回一个整数数组中最大子数组的和_第1张图片

 

总结

  本次的课堂作业是返回一个整数组中最大子数组的和,首先从题目上来讲不算太难,无非取一些相同类型的若干元素按无序的形式组织起来,求其和,然后再进行比较。因此从网上和书上找到了一个模板,再根据以下要求对代码进行补充。

1)要求程序必须能处理1000个元素,只需在代码的开头预编译命令中定义1000个字符;2)每个元素是int32类型的,出现子数组之和大于整型就表示的最大范围会出现什么情况。这个要求前部分可以理解,无非是整型数32位,但后半部分不能很好的理解,也没有找到相应的模板,因此这个要求也就就此搁浅了,等看到正确答案后再做补充。3)输入一个整形数组,数组里有正数也有负数。4)数组中连续一个或多个整数组成一个子数组,每个子数组都有一个和。即是随机输入的一个或多个整数中,从前往后每一个整数都与其之前的所有整数组成一个子数组,并计算出该子数组的和。5)求所有子数组的和的最大值,要求时间复杂度为O(n)。将所有子数组的和计算出来之后进行比较,得出其中最大值即为程序最后所需得到的结果。

合影

返回一个整数数组中最大子数组的和_第2张图片

转载于:https://www.cnblogs.com/shijiazhuangtiedaodaxue000/p/9786311.html

你可能感兴趣的:(返回一个整数数组中最大子数组的和)