今天做了这道题,对于其中的输出位置尝试了很久。最后借鉴了他人的思路,上代码:
#include <stdio.h>
int main()
{
int length;
while(scanf("%d",&length)!=EOF)
{
if(length==0) break;
int num[length];
int k=0,subarraymax=0,subtemp=0,maxstart=0,maxend=0;
for(int i=0;i<length;i++)
{
scanf("%d",&num[i]);
}
for (int i = 0; i < length; ++i)
{
if (subtemp<0)
{
subtemp=0;
k=i;
}
subtemp += num[i];
if (subtemp>subarraymax)
{
subarraymax = subtemp;
maxstart = k;//关键的k值
maxend = i;
}
}
if (subarraymax==0)
{
subarraymax = num[0];
maxstart = 0;
maxend = 0;
for (int i = 0; i < length; ++i)
{
if (num[i]>subarraymax)
{
subarraymax = num[i];
maxstart = i;
maxend = i;
}
}
}
printf("%d %d %d\n", subarraymax, maxstart, maxend);
}
return 0;
}