注意:若全是负数,则输出0 list[0] list[n-1]。
若只有负数和0,则应该输出0 0 0
#include <stdio.h>
#include <malloc.h>
int main()
{
int n;
scanf("%d", &n);
int *list = (int *)malloc(sizeof(int)*n);
bool flag = false;
for(int i = 0; i < n; i++)
{
scanf("%d", &list[i]);
if(list[i] >= 0) //至少有一个非负数
flag = true;
}
if(flag)
{
//这里必须要初始化0,比如遇到4 -1 -2 0 -3这种情况
int last = 0, first = 0, sum = 0;
for(int i = 0; i < n; i++)
{
int tmp = 0;
for(int j = i; j < n; j++)
{
tmp += list[j]; //tmp是从i开始到j的连续子列的和
if(tmp > sum)
{
sum = tmp;
first = list[i];
last = list[j];
}
}
}
printf("%d %d %d\n", sum, first, last);
}
else
printf("0 %d %d\n", list[0], list[n-1]);
return 0;
}