设计思路:利用随机数产生随机数组,输入控制数组长度,依次计算数组前面数的和如果出现负数则更新使这个数为数组中的下一个数在继续刚才的运算,开始令最大的子数组和为零后与刚刚产生的数组和比较如果比之小泽则更新最大子数组和的值为比较中较大的数,直到循环结束。
代码:
#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 | ||
描述:使用未定义变量 |