课堂作业第四周
求整数组中子数组和的最大值
思路:用随机数产生固定的个数为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);
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号