UVA 11059 Maximum Product
2017-04-09 11:51
351 查看
这道题目由于n很小,直接枚举区间,需要的是起点和终点,然后再用一个循环得到这个区间的乘积。所以复杂度是O(n^3)。
需要注意的是,由于n最大为18,s最大为10,所以乘起来最大可以达到10^18,会爆int,用long long即可。
还需要注意的是,如果乘积不是正数,就输出0。特判一下n == 1 && a[i] < 0即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n, a[20];
long long Max;
long long Count(int s, int e)
{
long long sum = 1;
for(int i = s; i <= e; i++)
sum *= a[i];
return sum;
}
int main()
{
int k = 1;
while(scanf("%d", &n) != EOF)
{
Max = 0;
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
for(int i = 0; i < n; i++)
for(int j = i; j < n; j++)
{
long long t = Count(i, j);
if(t > Max)
Max = t;
}
if(n == 1 && a[0] < 0)
Max = 0;
printf("Case #%d: The maximum product is %lld.\n\n", k++, Max);
}
return 0;
}
需要注意的是,由于n最大为18,s最大为10,所以乘起来最大可以达到10^18,会爆int,用long long即可。
还需要注意的是,如果乘积不是正数,就输出0。特判一下n == 1 && a[i] < 0即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n, a[20];
long long Max;
long long Count(int s, int e)
{
long long sum = 1;
for(int i = s; i <= e; i++)
sum *= a[i];
return sum;
}
int main()
{
int k = 1;
while(scanf("%d", &n) != EOF)
{
Max = 0;
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
for(int i = 0; i < n; i++)
for(int j = i; j < n; j++)
{
long long t = Count(i, j);
if(t > Max)
Max = t;
}
if(n == 1 && a[0] < 0)
Max = 0;
printf("Case #%d: The maximum product is %lld.\n\n", k++, Max);
}
return 0;
}
相关文章推荐
- UVA - 11059 Maximum Product (简单枚举)
- 【例题 7-2 UVA - 11059】Maximum Product
- UVa 11059 Maximum Product
- UVA - 11059:Maximum Product
- Uva 11059 Maximum Product
- Uva 11059 Maximum Product
- UVa 11059 - Maximum Product
- UVa 11059 - Maximum Product
- UVA 11059 Maximum Product 最大乘积
- 紫书章七 例题2 UVA 11059 Maximum Product
- UVa 11059 Maximum Product
- UVa11059 - Maximum Product
- UVA 11059:Maximum Product
- Maximum Product UVA - 11059
- 紫书章七 例题2 UVA 11059 Maximum Product
- UVA 11059 - Maximum Product
- 紫书章七 例题2 UVA 11059 Maximum Product
- uva 11059 maximum product(水题)——yhx
- Uva 11059 Maximum Product