样例输入:
-2 11 -4 13 -5 -2
样例输出:
20 2 4
样例说明:
输入:6个数,元素间以空格分隔。
输出:序列的最大子段和20,得到最大子段和时的起始编号为2,终止编号为4。
c++代码实现:
#include <iostream>
#include <vector>
using namespace std;
int starti;//起始位置
int startj;//终止位置
int sum=0;//最大子段和
void maxSub(vector<int>&arr){
int b;
for(int i=0;i<arr.size();i++){
if(b>0){
b+=arr[i];
}else{
b=arr[i];
starti=i;
}
if(b>sum){
sum=b;
startj=i;
}
}
}
int main(){
vector<int> arr;
int num;
cout<<"输入数据:";
while(cin>>num){
arr.push_back(num);
if(cin.get()=='\n')break;
}
maxSub(arr);
cout<<"最大子段和:"<<sum<<endl;
cout<<"起始位置:"<<starti+1<<endl;
cout<<"终止位置:"<<startj+1<<endl;
}
结果: