题目: 最大子段求和问题。

来源:百度知道 编辑:UC知道 时间:2024/05/29 13:34:31
输入一组整数到一维数组中,其中包括正数,负数和零,编写程序求出一个连续的子段,要求该子段的数值之和最大。
例如,一组整数为:1,4,-15,4,9,23,-2,3
输出结果:4,9,23,-2,3
要求:1.具有简单的用户界面;
2.学生独立完成系统的设计,编码和调试工作并通过指导老师的检查;
3.用C或C++语言实现课设内容;
4.按课程设计规范撰写课程设计报告。

#include <iostream.h>

void main()
{
int nmb[]={1,4,-15,4,9,23,-2,3,-21,1}; //任意数组

int nlength=sizeof(nmb)/sizeof(int);//数组长
int tempSum=nmb[0], maxvalue=0,beginCout,endCout;
for (int i=0;i<nlength;i++)//遍历字段,累加正数段
{
if (tempSum>0)//如果临时和大于0的
{
tempSum+=nmb[i]; //累加字段和
}
else //小于0或等于0
{
tempSum=nmb[i];//临时和小于等于0的时候就掐断,即从下一个正数开始再算
beginCout=i;//重置开始计算位置
}
if (tempSum>maxvalue)//零时值如果超过上次储存的最大值
{
maxvalue=tempSum;//存储最大值
endCout=i;//值最大,故重置结束位置
}
}
cout<<"maxvalue="<<maxvalue<<" beginCout="<<beginCout<<" endCout="<<endCout<<endl;
cout<<"MaxValue part is: ";
for (i=beginCout;i<=endCout;i++)//输出
{
cout<<nmb[i]<<" | ";
}
cout<<"\n";
}