题目描述:输入数字n和一个整型数组,n为数组长度,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
示例:
输入:
5
6 -1 5 4 -7
输出:
14
思路:
从头开始遍历数组,用一个变量p来保存子数组的和,一旦子数组加到负数,这个数组必然与后面的数结合不如单取后面的数要来的大,故而将现有的p舍弃,同时用一个变量q来保留p的最大值,但由于存在数组全为负数的情况,故而用变量m来保存数组内所有数的最大值,等到遍历结束进行分类讨论。
代码:
#include <stdio.h>
int main()
{
int i,n,s,p,q,m;
scanf("%d",&n);
p=0;
q=0;
m=-1000;
for(i=0;i<n;i++)
{
scanf("%d",&s);
if(s>m)
{
m=s;
}
if(p+s>0)
{
p=p+s;
}
else
{
p=0;
}
if(p>q)
{
q=p;
}
}
if(m>0)
{
printf("%d\n",q);
}
else
{
printf("%d\n",m);
}
return 0;
}
1619

被折叠的 条评论
为什么被折叠?



