#include <stdio.h>
#include <limits.h>
#define LEN 16
int sums[LEN];
//计算累加和,如果前面累加到负数,则重新开始累加
void init(int a[])
{
sums[0]=a[0];
for(int i=1;i<LEN;i++)
{
if(sums[i-1]<0)
{
sums[i]=a[i];
}
else
{
sums[i]=sums[i-1]+a[i];
}
}
}
int main()
{
int a[16]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7};
init(a);
int max=INT_MIN,left=0,right=0;
//找累加和最大的项
for(int i=0;i<LEN;i++)
{
if(sums[i]>max)
{
max=sums[i];
right=i;
}
}
//找right前面最小累加和为正的项
left=right;
while(sums[left]>0)
{
left--;
}
left++;
printf("%d,%d,%d",left,right,max);
getchar();
}
算法导论 练习题 4.1-5
最新推荐文章于 2018-11-04 21:52:49 发布