最大乘积
题目链接:
题意:
输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0.
注意格式。
Sample Input
32 4 -3 52 5 -1 2 -1 Sample OutputCase #1: The maximum product is 8. Case #2: The maximum product is 20.分析:
设置x为最大值y为最小值 ,在枚举更新时,如果a[i]为正,则对应跟新,
a[i]为0时,当前最大值,最小值置零,a[i]小于0时,最大的值乘以a[i]后变成最小,
相反最小变成最大。
1 #include2 using namespace std; 3 int main() 4 { 5 int i,n,a[20],count=1; 6 while(cin>>n) 7 { 8 long long max=0,x=0,y=0,z; //乘积最大可以为10^18所以防止溢出用long long 9 for(i=0;i >a[i];11 for(i=0;i 0) 15 { x=x*a[i];16 y=y*a[i];17 if(x==0) x=a[i];18 }else if(a[i]<0) //小于0进行交叉相乘19 {20 z=x*a[i];21 x=y*a[i];22 y=z;23 if(y==0) y=a[i];24 } 25 if(max