编程思路:从该数组里随机生成的数中,从最后一个开始进入循环,如果这个数大于0,定义一个变量sum,并初始化它的值为0,把数组里的数加到sum上,如果sum的值大于max_sum(即最大子数组的和,初始化为0),把sum的值赋给max_sum,如果sum的值小于0,令sum的值为0,最后输出最大子数组的和;
程序代码:
#include <iostream> #define N 10 using namespace std; void main() { int a[N];//定义一个数组 cout<<"数组的所有成员有:"<<endl; for(int i=0;i<N;i++) { a[i]=rand()%N-N/2; cout<<a[i]<<" "; } int sum=0,max_sum=0; for(int i=0;i<N;i++) { sum=sum+a[N-i-1]; if(a[N-i-1]>=0) { if(max_sum<sum) max_sum=sum; if(sum<0) sum=0; } } cout<<endl; cout<<"最大子数组的和为:"<<max_sum<<endl; }
结果截图:
总结:使用rand()函数随机生成数的时候,它会生成0-1之间的数,如果对他进行取余运算即rand()%N,则会生成0-N之间的数,要让它随机生成的数中有负数的话,要在它的基础上减去N的一半即rand()%N-N/2;
学生:陈杰 日期:2015/3/23 教师:王建民 课程:软件工程概述
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/21 |
10:00 |
11:00 |
60 |
编程序 |
||
3/22 |
14:00 |
15:00 |
20 |
40 |
查错 |
|
3/23 |
21:10 |
21:00 |
30 |
发博客 |
缺陷记录日志:
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
22/3 |
1 |
随机生成负数 |
编码 |
编译 |
20 |
查找资料 |
22/3 |
2 |
连续子数组 |
编码 |
编译 |
50 |
仔细思考 |
周活动总结表:
活动 |
上课 |
编写代码 |
看书 |
休息娱乐 |
总计 |
周一 |
480 |
480 |
|||
周六 |
70 |
400 |
470 |
||
周日 |
100 |
50 |
350 |
500 |
|
总计 |
480 |
170 |
50 |
750 |
1450 |