#include <stdio.h>
#define N 10000
int main ()
{
int n;
int a[N]={0};
scanf("%d", &n);
int i, sum= 0, max=-1, maxi, maxj, maxo=0 ;
//sum:当前求和 max:最大值 maxi 最大子列左端 maxj 最大子列右端 maxo 临时记录员
for (i=0;i<n;i++){
scanf("%d", &a[i] );
sum+= a[i];
if (sum < 0){
sum= 0;
maxo=i+1;
}else if (sum > max){
max = sum;
maxi=maxo;
maxj=i;
}
}
if (max>=0){
printf("%d %d %d", max, a[maxi], a[maxj]);
}else {
printf("%d %d %d", 0, a[0], a[n-1]);
}
return 0;
}
我还是喜欢第二个简单粗暴。。。
#include <stdio.h>
#define N 100000
int main ()
{
int n;
int a[N]={0};
scanf("%d",&n);
int i,j,sum=0, max=-1,maxi,maxj,negative=1,zero=0 ;
for (i=0;i<n;i++){
scanf("%d",&a[i]);
if (a[i] > 0){
negative = 0;
}else if (a[i] == 0) {
zero=1;
}
}
for(i=0;i<n;i++){
sum=0;
for (j=i; j<n; j++){
sum += a[j];
if (sum > max){
max = sum;
maxi = i;
maxj = j;
}
}
}
if (negative==1){
if (zero==0){
max=0;
maxi=0;
maxj=n-1;
}else{
max=0;
maxj=maxi;
}
}
printf("%d %d %d",max,a[maxi],a[maxj]);
return 0;
}