输入n个元素组成的序列S,找出一个乘积最大的连续子序列。如果这个最大乘积不是正数,则输出0;1<=n<=18,-10<=Si<=10.
分析:
连续子序列有两个要素,起始位置和结束位置,则只需找出起始位置和结束位置即可,注意由于每个元素的绝对值不超过10并且个数不超过18个元素,则最大的乘积不会超过10的18次幂,可用long long储存,在表示数的时候注意数的大小。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,i,k=0,j;
int str[20]={0};
while(scanf("%d",&n)!=EOF&&n!=0)
{
long long int maxn=0,ma=1;/*因为若小于0,则输出0,所以后面与0进行比较*/
for(i=0;i<n;i++)
scanf("%d",&str[i]);
for(i=0;i<n;i++)//开始位置
{
for(j=i;j<n;j++)//结束位置
{
ma=1;
int t;
for(t=i;t<=j;t++)//控制个数
ma=ma*str[t];
if(ma>maxn)//进行比较
maxn=ma;
}
}
k++;
printf("Case #%d: The maximum product is %lld.\n\n",k,maxn);
}
return 0;
}
进行暴力求解