编程思路:从该数组里随机生成的数中,从最后一个开始进入循环,如果这个数大于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 | 
原文:http://www.cnblogs.com/chenjie00/p/4359431.html