课堂练习2

1.设计思想

    第一次求子数组最大和的程序存储和的时候用的二维数组不能够实现时间复杂度为O(n),然后也没什么新的思路,就从网上搜了一种算法。

    该算法是构造一个函数来返回子数组的最大和,当前面的几个数,加起来后,b<0后, 把b重新赋值,置为下一个元素,b=a[i]。 当b>sum,则更新sum=b; 若b<sum,则sum保持原值,不更新。

2.源程序

复制代码
#include <iostream>
using namespace std;
#define N 15

int max(int *a)
{
    int sum=0,b=0;
    for(int i=0;i<N;i++)
    {
         if(b<0)
        {
             b=a[i];
        }
        else
        {
            b+=a[i];
        }
        if(sum<b)
        {
            sum=b;
        }
    }
    return sum;
}


void main()
{
    int a[N];
    cout<<"生成的数组为:";
    for(int i=0;i<N;i++) //生成数组里的随机数
   {
        a[i]=rand()%100-50;
        cout<<a[i]<<" ";
    }
    cout<<endl;

    cout<<"最大数组的和为:"<<max(a)<<endl;

}
复制代码

3.结果截图

4.总结

  很遗憾的最后没有输出子数组,对于子数组的输出没有什么思想,也从中学到了一种新的算法,希望再经过思考能够将这个问题解决的更好。

5.工作照

陈杰:主要进行博文的总结等

孟祥娟:主要负责程序的编写和运行测试

原文地址:https://www.cnblogs.com/chenjie00/p/4387416.html