题目描述
求一个整数序列的连续子序列最大乘积,连续子序列最大乘积就是这个数列中的整数依次相乘的答案是所有子序列中最大的。
输入描述
有多组数据,每组数据第一行输入一个n,第二行输入n个元素组成的序列S。1<=n<=18,-10<=S[i]<=10。
输出描述
数据输出要求输出"Case #M: The maximum product is P.",其中M为数据组号,P为乘积值。每组数据一行。如果这个最大的乘积不是正数,输出0(表示无解)
样例输入
3
2 4 -3
5
2 5 -1 2 -1
样例输出
Case #1: The maximum product is 8.
Case #2: The maximum product is 20.
提示
:
连续的子序列有两个要素,即起点和终点,因此只需枚举起点和终点,然后选择出每个起点到终点的连续子序列中的最大乘积,最后再将所有的最大乘积相比较,选择出其中最大的值即可。
由于至多18个元素且绝对值不超过10,最大乘积不超过10的18次方,可以使用long long型存储
AC代码:
#include
#include
#include
using namespace std;
int n;
int x[20];
int main()
{
int t = 1;
while (scanf("%d", &n) != EOF) {
long long ans = -1, temp;
for (int i = 0; i < n; i++)
scanf("%d", &x[i]);
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
temp = 1;
for (int k = i; k <= j; k++) {
temp *= x[k];
ans = max(temp, ans);
}
}
}
if (ans <= 0)
printf("0\n");
else
printf("Case #%d: The maximum product is %lld.\n", t, ans);
t++;
}
return 0;