您的位置:首页 > 其它

最大乘积----简单枚举

2014-03-11 20:33 183 查看
输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正整,应输出-1(表示无解)。

1≤n≤18,-10≤Si≤10。

样例输入:

3

2 4-3

5

2 5-1 2 -1

样例输出:

8

20

代码如下:

#include <stdlib.h>

int main()

{

int max(int *z,int n);

int a[18];

int n,m;

scanf("%d",&n);

int *p;

for (p=a;p<a+n;p++)

scanf("%d",p);

m=max(a,n);

for (p=a;p<a+n;p++)

{

if ( max(p,n)>m )

m=max(p,n);

}

if (m<0)

printf("-1\n");

else

printf("%d\n",m);

return 0;

}

int max(int *z,int n)

{

int i,*p;

int max=0,m=1;

for(i=1;i<n;i++)

{

m=1;

for(p=z;p<=z+i;p++)

m*=(*p);

if (m>=max)

max=m;

}

return max;

}

c++代码如下:

#include<iostream>

#include<string.h>

#include<stdio.h>

#include<ctype.h>

#include<algorithm>

#include<stack>

#include<queue>

#include<math.h>

using namespace std;

int a[30];

int i,j;

int main()

{

int n;

int w;

long long ans;

while(scanf("%d",&n)!=EOF)

{

for(i=0; i<n; i++)

scanf("%d",&a[i]);



ans=0;

for(i=0; i<n; i++)

{

w=1;

for(j=0; j<n; j++)

{

w*=a[j];

if(w>ans)

ans=w;

}

}

if(ans>=0)

printf("%d\n",ans);

else

printf("-1\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: