#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;
}
之前总是只能部分正确。有一个测试点不能通过。原因就是没有考虑到数组中只有负数和零的情况!
Maximum Subsequence Sum (25)——改进版
最新推荐文章于 2022-02-28 22:30:50 发布
本文探讨了一个使用C语言处理数组求和的问题,在特定条件下如何找出最大子数组和及其起始与结束位置。作者分享了自己在解决此问题过程中遇到的一个测试点未能通过的情况,并解释了未考虑数组中只有负数和零时可能导致的错误。
摘要由CSDN通过智能技术生成