最大乘积
输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列。如果这个最大的成绩不是正数,应输入-1(表示无解)。输入0结束输入。1<=n<=18,-10<=Si<=10。
样例输入:
3
2 4 -3
样例输出:
8
20
#include<iostream> #include<vector> using namespace std; int main() {int n,m;vector<int> ivec;while(cin>>n){if(n==0) break;for(int i=0; i<n; i++){cin>>m;ivec.push_back(m);}long long max=-1;long long tem=1;for(vector<int>::iterator iter1=ivec.begin(); iter1<ivec.end(); iter1++)for(vector<int>::iterator iter2=ivec.begin(); iter2<ivec.end(); iter2++){for(vector<int>::iterator iter=iter1; iter<=iter2; iter++){tem=tem*(*iter);if(tem>max)max=tem;}tem=1;}cout<<max<<endl;ivec.clear();}return 0; }
分析:连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。