设计思路:
1.用随机数产生一定数量的整数,分别用变量控制随机数的正负和范围。
2.把数组的第一位a[0]设为最大值max和子数组之和sum的初始值,与之后的数目进行比较,如果第二个数大于等与0且sum小于等与0;令sum=第二个数;如果第二个数大于等与0且sum大于0;则sum=+第二个数;如果第二个数小于0且max大于等于0,则sum=0;如果第二个数小于0且max小于于0,则sum=的二个数。最后sum与max选出较大的,就是结果。
代码:
#include <iostream>
#include<cmath>
using namespace std;
void main()
{
int n,m,i,x,s[100], sum, Max;
cout<<"输入数组的个数和数组中元素的最大范围";
cin>> n>>m;
for(i = 0; i < n; ++i)
{
x=rand()%2+1;
const int y=pow(-1.0,x);
s[i]=y*rand()%m+1;
}
for( i = 0; i < n; ++i)
{
cout<<s[i]<<" ";
}
Max = sum = s[0];
for(i = 1; i < n; ++i)
{
if(s[i] >= 0)
{
if(sum <= 0)
sum = s[i];
else
sum = sum + s[i];
}
else
{
if(Max >= 0)
{
sum = 0;
}
else
sum = s[i];
}
if(sum > Max)
Max = sum;
}
cout << "max = " << Max << endl;
}
总结:如果用时间复杂度f(n^2)比较容易,但比较难的是把时间复杂度f(n),所以我就上网了搜了一下,找到了简单的算法。所以问题在难,也会有解决的办法,前提就必须有扎实的基础,才能找到更好的办法。
周活动总结表:
日期 | 听课 | 编写程序 | 阅读课本 | 准本考试 | 日总计 |
周日 | 60 | 30 | 90 | ||
周一 | 200 | 30 | 30 | 260 | |
周二 | 500 | 500 | |||
周三 | 100 | 60 | 30 | 190 | |
周四 | 400 | 30 | 430 | ||
周五 | 300 | 30 | 30 | 360 | |
周六 | 60 | 30 | 90 | ||
周总结 | 1500 | 270 | 150 | 1920 |
时间记录日志
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/20 | 10:10 | 12:00 | 10 | 100 | 听课 | |
14:00 | 15:50 | 10 | 100 | 听课 | ||
20:00 | 21:00 | 60 | 编程 | 设计西路 | ||
3/21 | 9:00 | 10:00 | 60 | 编程 |
寻找时间复杂度为f(n)的方法 |
|
19:00 | 20:00 | 60 | 编程 | |||
3/22 | 15:00 | 17:00 | 30 | 120 | 编程 | |
3/23 | 8:00 | 9:50 | 10 | 100 | 听课 | |
10;00 | 10:45 | 45 | 写实验报告 |
缺陷记录日志:
日期 | 编号 | 类型 | 映入阶段 | 排出阶段 | 修复时间 | 修复缺陷 |
3/21 | 1 | 编码 | 编译 | 1min | ||
描述:a没有初始化定义 | ||||||
2 | 编码 | 编译 | 1min | |||
描述:漏掉了分号“;” | ||||||
3 | 编码 | 编译 | ||||
描述:从“double”转换到“const int”,可能丢失数据 | ||||||
3/22 | 4 | 编码 | 编译 | 1min | ||
描述:漏掉了“}” |