题目(最大子数组):
给定一个数组,求取其中的有最大和的子数组(子数组表示连续元素构成的序列)
举例:
比如输入5个数,大小分别为:-3 6 -2 7 -4,则最大子数组为6 -2 7,他们的和为11.
输入:
5
-3 6 -2 7 -4
输出:
11
代码:
/**给定一个数组,求取其中的有最大和的子数组(子数组表示连续元素构成的序列)*/
#include <iostream>
using namespace std;
int main()
{
int a,n,sum=0,Max=-1001;
cout <<"输入数组大小:"<<endl;
cin >>n;
cout <<"输入数组成员值:"<<endl;
for(int i=0;i<n;i++){
cin >> a;
sum += a;
if(Max<sum)
Max = sum;
if(sum<0)
sum=0;
}
cout << Max <<" ";
return 0;
}
测试:
题目(最大上升子数组):
给定一个数组,求取其中的有最大和的上升子数组(子数组表示连续元素构成的序列)
举例:
比如输入6个数,大小分别为: 10 5 6 -2 7 8,则最大上升子数组为7 8,他们的和为15.
输入:
6
10 5 6 -2 7 8
输出:
15
代码:
/**给定一个数组,求最大上升子数组*/
#include <iostream>
using namespace std;
int main()
{
int a,n,tmp,sum=0,Max=-1001;
cout <<"输入数组大小:"<<endl;
cin >>n;
cout <<"输入数组成员值:"<<endl;
for(int i=0;i<n;i++){
cin >> a;
if(a<tmp||sum<0) //a>tmp转为求最大下降子数组
sum=0;
sum += a;
if(Max<sum)
Max = sum;
tmp = a;
}
cout << Max <<" ";
return 0;
}
代码(使用vector):
/**给定一个数组,求最大上升子数组*/
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a,n,tmp=-1001,sum=0,Max=-1001;
vector<int>v;
cout <<"输入数组大小:"<<endl;
cin >>n;
cout <<"输入数组成员值:"<<endl;
for(int i=0;i<n;i++){
cin >> a;
v.push_back(a);
}
for(int j=0;j<v.size();j++){
if(v[j]<tmp||sum<0)
sum=0;
sum += v[j];
if(Max<sum)
Max = sum;
tmp = v[j];
}
cout << Max <<" ";
return 0;
}