对于这个问题呢 我一直在vc中可以运行但是后面就是提交不了 很纠结哦
对于这个问题有二中方法 一种是贪心算法 第二种是大整数哦
首先我们介绍第一种方法
#include<stdio.h>
int main()
{
int c=1,b,a,s,n,i,j,k,m,l;
scanf("%d",&k);
while(k--)
{
m=-9999;s=0;j=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a);
s=s+a;
j++;
if(s>m)
{
b=j;
m=s;
l=i;
}
if(s<0)
{
s=0;
j=0;
}
}
printf("Case %d:\n%d %d %d\n",c++,m,l-b+1,l);
if(k)printf("\n");
}
return0;
}
第二种方法我们使用打整数来做的
#include<stdio.h>#include<stdlib.h>int a[100005],sum[100005];int main(){ int ca,count=0; scanf("%d",&ca); while(ca--) { int n,i; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); sum[1]=a[1]; int r=1,max=a[1]; for(i=2;i<=n;i++) { if(sum[i-1]>0) { sum[i]=sum[i-1]+a[i]; if(sum[i]>max) { max=sum[i]; r=i; } } else { sum[i]=a[i]; if(sum[i]>max) { max=sum[i]; r=i; } } } count++; for(i=r-1;i>0;i--) if(sum[i]<0) break; printf("Case %d:\n",count); printf("%d %d %d\n",max,i+1,r); if(ca!=0) printf("\n"); }}