#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
float get_max(float a,float b,float c)
{
if(a>b)
{
if(a>c)
return a;
else
return c;
}
else
{
if(b>c)
return b;
else
return c;
}
}
float get_min(float a,float b,float c)
{
if(a<b)
{
if(a<c)
return a;
else
return c;
}
else
{
if(b<c)
return b;
else
return c;
}
}
void max_product( float *s, int n)
{
assert(s!=NULL);
assert(n>0);
float *max=(float*)malloc(sizeof(float)*(n+1));
float *min=(float*)malloc(sizeof(float)*(n+1));
float max_val;
max[1]=s[1];
min[1]=s[1];
max_val=max[1];
for(int i=2;i<=n;i++)
{
max[i]=get_max(max[i-1]*s[i],min[i-1]*s[i],s[i]);
min[i]=get_min(max[i-1]*s[i],min[i-1]*s[i],s[i]);
if(max_val<max[i])
max_val=max[i];
}
if(max_val<0)
printf("%f\n",-1);
else
printf("%f\n",max_val);
free(max);
free(min);
}
void main()
{
float s[]={0,-2.5,4,0,3,0.5,8,-1};//第一个元素弃用
int length=sizeof(s)/sizeof(int);
max_product(s,length-1);
float max=get_max_product(s,length);
printf("%f\n",max);
}
给一个浮点数序列,取最大乘积子序列的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积子序列为3,0.5,8
最新推荐文章于 2021-05-19 20:02:39 发布