#include<stdio.h>
#include<stdlib.h>
int main()
{
int k,i;
int *a;
while(scanf("%d",&k)!=EOF)
{
if(k<1||k>10000) continue;
int sum=0,b=0;
int f=0,l=k,t=0;
a=(int *)malloc(k*sizeof(int));
for(i=0;i<k;i++)
{
scanf("%d",&a[i]);
if(b>0) b+=a[i];
else
{
b=a[i];
t=i;
}
if(b==0&&sum==0) {
t=i;l=i;
}
if(b>sum)
{
sum=b;
l=i;
}
if(t<=l&&l!=k) f=t;
}
if(l==k) l--;
printf("%d %d %d\n",sum,a[f],a[l]);
free(a);
}
return 0;
}之前总是只能部分正确。有一个测试点不能通过。原因就是没有考虑到数组中只有负数和零的情况!
转载于:https://www.cnblogs.com/abc-24990/p/4257503.html
本文分享了一段C语言代码,旨在找出数组中连续子数组的最大和及其起始和结束位置。通过对代码进行分析,发现未能正确处理数组全部为负数和零的情况,并给出了解决方案。

5442

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



