第一版
#include <stdio.h>
int needsum(int a[],int n);
int main()
{
int n,j=0;
scanf("%d",&n);
int a[n];
for(j=0;j<n;j++) {
scanf("%d",&a[j]);
}
needsum(a,n);
return 0;
}
int needsum(int a[],int n) {
int nowsum=0,maxsum=0;
int i,first=a[0],last=a[0];
for(i=0;i<n;i++) {
nowsum+=a[i];
if (nowsum>maxsum) {
maxsum=nowsum;
last=a[i];
} else if (nowsum<0) {
nowsum=0;
first=a[i+1];//这里错,因为这样只考虑到前面全是负数时舍去的情况,如果后面也都是负数需要舍去的话,也会把first替换,也就是不适用于first和last都是中间的一段数的情况。
}
}
if (maxsum<0) {
printf("%d %d %d\n",0,a[0],a[n-1]);
} else {
printf("%d %d %d\n",maxsum,first,last);
}
return;
}
但是不会,待改。