这道题就是给出一串数,然后要我们求出其最大字串和!
然后由于要输出字串的起末位置,所以记得保存好位置的值!
代码中关键地方有详细的注释!可以在看代码的时候看一下!
注意下:就是在两组数据间是需要用一行空行来隔开的,
所以输出时需要注意下!
代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,num[201314];
int main()
{
int t;
cin>>t;
for(int ji=1; ji<=t; ji++)
{
memset(num,0,sizeof(num));
cin>>n;
for(int i=1; i<=n; i++)
cin>>num[i];
int beg=1,end=1,sum=0,ans=-5201314,te=1;//te记得初始化赋值为 1 !
for(int i=1; i<=n; i++)
{
if(sum>=0)
sum+=num[i];
else
{
sum=num[i];
te=i;//将新起点暂存起来!
}
if(sum>ans)
{
ans=sum;
beg=te;
end=i;//发现新的sum大于ans,所以此解可行,所以将起点和终点赋值!
}
}
cout<<"Case "<<ji<<":\n";
cout<<ans<<" "<<beg<<" "<<end<<endl;
if(ji!=t)//输出格式要求!
cout<<endl;
}
return 0;
}