最大乘积
输入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; }
分析:连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。