最大乘积 Maximum Product
题面翻译
给一串整数 S S S,你需要找到其连续子序列中乘积最大的那个,输出其乘积。如果找到的答案不是正数,那么输出 0 0 0,表示无解。
另外注意:每组输入后面都有一行空格,每组输出后面也应该有一个空行。输入以 EOF 结束。
题目描述
输入格式
输出格式
样例 #1
样例输入 #1
3
2 4 -3
5
2 5 -1 2 -1
样例输出 #1
Case #1: The maximum product is 8.
Case #2: The maximum product is 20.
分析:
直接暴力枚举就可以啦~~~
代码:
#include<bits/stdc++.h>
using namespace std;
long long n;
long long a[10000];
long long ka;
long long maxx;
long long res;
int main()
{
while(scanf("%lld",&n)==1)
{
for(int i=1;i<=n;i++) //输入
{
cin>>a[i];
}
maxx=0;//因为最大乘积是负数时输出0,所以maxx的初值为0
res=1;
for (long long i=1;i<=n;i++) //枚举连续子序列的左端点
{
for(long long j=i;j<=n;j++) //枚举连续子序列的右端点
{
res=1;//赋初值
for(long long k=i;k<=j;k++)//将这段序列的所有数字乘起来
{
res*=a[k];
}
maxx=max(maxx,res);//每次取最大值
}
}
printf("Case #%lld: The maximum product is %lld.\n\n",++ka,maxx);//按要求输出
}
return 0;
}
结束啦~~~