课堂作业第四周

求整数组中子数组和的最大值

思路:用随机数产生固定的个数为n,其中有负有正,for循环循环N次,默认最大子数组和为零,从a[0]开始使数组的每一个相加为k,再判断K是否大于最大子数组和Maxsum,大于是另maxsum=k;最后在判断k是否大于零,若小于零则让k=0;

时间记录表

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/20 10:10 12:00 10分钟 2小时 听课  
  19:30 21:00   1个半小时 进行初步编写规划 看PPt
3/21 9:00 11:00 30分钟 1个半小时 用普通的方法编写程序 不满足o(n)的时间复杂度
             
3/22 10:00 11:00   1个小时 编写满足o(n)时间复杂度的程序  
  16:00 17:00   1个小时 继续上午的编写  
 3/23  10:00  11:00    1个小时  写文档,做总结  
             
             
             

 

 

 

 

 

 

 

 

 缺陷记录表

日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3/20 1 40 设计 编译 1分钟 数组定义错误
    描述:定义数组的个数较少
  2 20 编码 编译 1分钟  
    描述 :缺少分号
3/21 3 40 编码 编译 2分钟  
    描述:缺少Cmath的头文件
  4 40 编码 编译 2分钟  

 

 

 

 

 

 

          描述:pow(x,y)函数中x必须为double类型          
  5 40 编码 编译 2分钟  
      描述:使随机数产生负数
3/22 6 20 编码 编译 1分钟  
      描述:漏掉  }
  7 40 描述:逻辑出现错误

 

 

 

 

 

周活动总结表

日起/任务 听课 编写程序 阅读课本 运动               日总结
周五(3.20) 4小时 2小时 1小时       7小时
周六(3.21)   2小时 1小时 2小时     5小时
周日(3.22)   1小时 2小时 1小时     4小时
周一(3.23) 4小时   1小时       5小时
周二(3.24) 8小时   1小时       9小时
周三(3.25) 2小时 2小时 1小时 1小时     5小时
周四(3.26) 6小时 1小时 1小时       8小时

 

 

 

 

 

 

代码

#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int a[100],i,j,f,n;
int MaxSum = 0;
int k = 0;
cout<<"请输入数组中数字的个数"<<endl;
cin>>n;
for(i=0;i<n;i++)
{
j=rand()%2+1;
f=pow(-1.0,j);
a[i]=f*rand()%10;
}
cout<<"数组为"<<endl;
for(i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"最大子数组为";

for(i=0;i<n;i++)
{

k += a[i];
if(k > MaxSum)
MaxSum = k;

if(k < 0)
k = 0;

}

cout<<MaxSum<<endl;
}

截图

总结:

该题最重要的是不容易满足时间复杂度o(n)这一要求,解题时可以先用普通方法一步一步的写出程序,然后在此基础上考虑哪些地方的条件可以改动,能合并就合并,进行简化,最后时期满足时间复杂度为o(n);

posted on 2015-03-23 10:21  bingoing  阅读(102)  评论(1编辑  收藏  举报

导航