课堂作业第四周

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

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

时间记录表

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

 

 

 

 

 

 

 

 

 缺陷记录表

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

 

 

 

 

 

 

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

 

 

 

 

 

周活动总结表

日起/任务听课编写程序阅读课本运动            日总结
周五(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);

转载于:https://www.cnblogs.com/bingoing/p/4356117.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值