最大乘積(Maximum Product,UVa 11059)


題目鏈接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/B

題意:

      輸入n個元素組成的序列S,找出一個乘積最大的連續子序列。如果這個最大的乘積不是正數,輸出0(表示無解)。1<=n<=18,-10<=Si<=10。每一個案例之間用空白行分隔,案例輸出要求輸出"Case #M: The maximum product is P.",其中M為案例號,P為乘積值。

案例:

        Sample Input

        3

        2 4 -3

 

        5

        2 5 -1 2 -1

        Sample Output

        Case #1: The maximum product is 8.

 

        Case #2: The maximum product is 20.

分析:

       連續的子序列有兩個要素,即起點和終點,因此只需枚舉起點和終點即可,由於至多18個元素且絕對值不超過10,最大乘積不超過10的18次方,可以使用long long型存儲。

源代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 const int maxn=20;
 5 int a[maxn];
 6 int main()
 7 {
 8     int N,i,j,t,ant=0;
 9     long long k,max;//注意輸入18位數全為10時,k和max數據過大
10     while(scanf("%d",&N)!=EOF)//數據量
11     {   
12         ant++;
13         for(i=0;i<N;i++)//數據
14             cin>>a[i];
15         max=0;//最大乘積值
16         for(i=0;i<N;++i)//起始位置
17         {   
18             for(j=i;j<N;j++)//結束點位置
19             {   k=1;
20                 for(t=i;t<=j;t++)//起點至終點數據乘積
21                     k*=a[t];
22                 if(max<k)//最大乘積值判斷
23                     max=k;
24             }
25         }
26         printf("Case #%d: The maximum product is %lld.\n",ant,max);//輸出語句控制
27         if(ant) cout<<endl;
28     }
29     return 0;
30 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM