您的位置:首页 > 其它

最大连续子序列相乘

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

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

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

源代码:

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