题目描述:https://vjudge.net/problem/UVA-11059
暴力求解类问题
连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。由于每个元素的绝对值不超过10且不超过18个元素,最大可能的乘积不会超过10 18 ,可以用long long存储。
今天发现VJ上有一个特别好用的功能:
在UDEBUG界面里不光有各个oj平台这道题的测试数据,还可以帮你快速定位你的代码和AC代码的不同之处。真是太好用了,有了这个,以后找bug就容易多了。
#include<iostream>
#include<limits>
#include<sstream>
using namespace std;
string s="";
long long v;
int count=0;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[n+1];
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
long long max=0;
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
int k=i;
long long m=1;
while(k<=j){
m*=a[k];
k++;
}
if(max < m)
{
max=m;
}
}
}
ostringstream oss;
oss<<"Case #"<<++count<<": The maximum product is "<<max<<".\n\n";
s+=oss.str();
}
cout<<s;
}
本文介绍了一种通过暴力求解的方法来寻找连续子序列的最大乘积。利用双层循环枚举起点和终点,适用于不超过18个元素且每个元素绝对值不超过10的情况。

669

被折叠的 条评论
为什么被折叠?



