大致题意:
输入一个数列,找到从哪个数到哪个数的和最大,即最大子串(区分于子序列)
输出子串和的最大值已经最大子串开头和结尾的下标,并输出。
!!!我一开始写的时候定义max=-1,忽略了几个数的和可能比-1还小的可能性。。。。。
#include<iostream>
using namespace std;
int a[100000]={0};
void main()
{
int t,n;
int max=0;
cin>>t;
for(int j=1;j<=t;j++)
{
cin>>n;
int sum=0,temp=0,b=0,e=0;
for(int max=-10000,i=0;i<n;i++)//我当时写成-1,调了好久,没想到是这么个错误
{
cin>>a[i];
if(sum>=0)
{
sum+=a[i];
}
else
{
sum=a[i];
temp=i;
}
if(sum>max)
{
max=sum;
b=temp;
e=i;
}
}
printf("Case %d:\n",j);
printf("%d %d %d\n",max,b+1,e+1);
if(j<t)
cout<<endl;
}
}
本文介绍了一种求解最大子串和问题的算法实现,该算法能够找出给定数列中连续子串的最大和,并返回该子串的起始与结束位置。通过合理设置初始值避免了负数情况下的错误。
750

被折叠的 条评论
为什么被折叠?



