给一个浮点数序列,取最大乘积子序列的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积子序列为3,0.5,8

来源:互联网 发布:阿里云 l2tp 编辑:程序博客网 时间:2024/06/01 22:10
#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;elsereturn c;}else{if(b>c)return b;elsereturn c;}}float get_min(float a,float b,float c){if(a<b){if(a<c)return a;elsereturn c;}else{if(b<c)return b;elsereturn 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);}


原创粉丝点击