这道题就是给出一串数,然后要我们求出其最大字串和!
然后由于要输出字串的起末位置,所以记得保存好位置的值!
代码中关键地方有详细的注释!可以在看代码的时候看一下!
注意下:就是在两组数据间是需要用一行空行来隔开的,
所以输出时需要注意下!
代码如下:
#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; }
原文地址:http://blog.csdn.net/u014004096/article/details/40790495