最大连续子序列相乘

来源:互联网 发布:淘宝领优惠券的网站 编辑:程序博客网 时间:2024/06/08 08:21

最近忙实习   也没什么时间 些代码,看到一个 求最大连续子序列相乘的觉得挺有意思的,所以记录下


题目大意: 有一连续子序列 , 要你求出期间子序列相乘出现的最大值



解法: 简单,主要是因为有正有负 所以每次都要去记录 最大和最小 ,因为最小的可能绝对值最大 ,再乘一个数就会变成最大


源代码:

#include<iostream>#include<cstdio>using namespace std;#define min(a, b) (a <b ? a:b)#define max(a, b) (a > b? a: b)int main(){    int n, i;    double ans , maxx, minn, d;    double tmp1,tmp2;    while(cin>>n)    {         cin>>d;         ans =maxx=minn=d;        for(i = 1 ; i < n;i++)        {            cin>>d;            tmp1=maxx*d;             tmp2=minn*d;               //这里记录最大最小是因为有正有负            maxx = max(max(tmp1, tmp2),d);            minn= min(min(tmp1, tmp2), d);            if(ans < maxx)            {//记录其间出现的最大值                 ans =maxx;            }        }        int t =(int) ans;        if(ans < 0)        {             cout<<-1<<endl;        }        else if(t== ans)        {            cout<<t<<endl;        }        else         {             printf("%.2f", ans);        }    }    return 0;}//测试用例 7// -2.5 4 0 3 0.5 8 -1 // 12


0 0
原创粉丝点击