课堂练习一

 

总结

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

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

 #include<iostream>
#define n 100
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<length; 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<length; i++)
    {
        for (j = 0; j<length; 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;
}

猜你喜欢

转载自www.cnblogs.com/lbq-0412/p/9786620.html