If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.
两个点:如果输入都是负数,最大和应该为0;输出第一个和最后一个位置。如果输入的只有0和负数,那么输出0 0 0 。
#include<stdio.h>
#include<malloc.h>
int main()
{
int N,flag1=0,flag2=0;
scanf("%d",&N);
int *A=(int *)malloc(sizeof(int)*N);
for(int i=0;i<N;i++)
scanf("%d",A+i);
int i,j,begin,end,first=0;
int ThisSum=0,MaxSum=0;
for(int i=0;i<N;i++)//用于实现 0 0 0 的情况的输出
{
if(A[i]==0)
flag1++;
else if(A[i]>0)
flag2++;
}
for(i=0;i<N;i++)
{
ThisSum+=A[i];
if(MaxSum<ThisSum)
{
MaxSum=ThisSum;
begin=first;//更新最大的子列和的开头
end=i;//更新最大子列和的尾巴
}
if(ThisSum<0)
{
ThisSum=0;
first=i+1; //记录每一个新的子列的开头
}
}
if(MaxSum>0)
printf("%d %d %d",MaxSum,A[begin],A[end]);
else if(flag1&&!flag2)//即输入的都是负数和0
printf("0 0 0");
else//即输入的都是负数
printf("%d %d %d",MaxSum,A[0],A[N-1]);
}