最大子数组和

设计思路:利用随机数产生随机数组,输入控制数组长度,依次计算数组前面数的和如果出现负数则更新使这个数为数组中的下一个数在继续刚才的运算,开始令最大的子数组和为零后与刚刚产生的数组和比较如果比之小泽则更新最大子数组和的值为比较中较大的数,直到循环结束。

代码:

#include<iostream>
#include<cmath>
using namespace std;

void main()
{
 int a[100],b=0,s=0,i,n,l,q;
 cout<<"输入数组长度";
 cin>>n;
 for(i=0;i<n;i++)
 {
  l=rand()%2+1;//产生随机数组
        const int q=pow(-1.0,l);
  a[i]=q*rand()%100+1;
  cout<<a[i]<<" ";
 }
 for(i=0;i<n;i++) //求子数组和最大值
    { 
        if(b<0)
            b=a[i]; 
        else 
            b+=a[i]; 
        if(s<b) 
            s=b; 
    }
 cout<<endl;
 cout<<s<<endl;


}

截图:

 总结:通过本次的编程本来看似复杂的程序也会有简单的方法能解决,本次的子数组求和要求时间复杂度为O(n)开始的思路中总是时间复杂度为O(n2),后来的调试与思考讨论终于有了简便的方法,这让我意识到了算法的重要性。

项目计划总结:
日期/任务 听课 编程 阅读课本 课余活动 查阅资料 日总计
周日   120   120 60 300
周一 200 60 60   30 350
周二 500         500
周三 100 60 30 60 30 280
周四 400         400
周五 300 60 30   30 420
周六   120 60 120   240
周总计 1500 420 180 300 150 2490
时间记录日志:
 
日期 开始时间 结束时间 中断时间 净时间 活动 备注
3.20 16:00 17:30   90 设计思路 设计子数组求和的思路
3.21 8:00 10:00 20 100 编程 根据昨天思路编写程序
  16:00 17:20   80 编程 调试程序,修改问题
3.22 15:00 17:00 10 110 编程 修改思路简便程序
  20:00 21:00   60 编程 调试程序
3.23 10:00 11:00   60 实验报告 书写实验报告
缺陷记录日志:
 
日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3.21 1 20 编码 编译 5min  
  描述:pow()函数中没有使用double型
  2 20 编码 编译 1min  
  描述:使用未定义变量
  3 20 编码 编译 1min  
  描述:使用未定义变量
posted @ 2015-03-23 10:47  零夕  阅读(192)  评论(1编辑  收藏  举报