Time Limit:3000MS | Memory Limit:Unknown | 64bit IO Format:%lld & %llu |
Description
![Download as PDF Download as PDF](https://i-blog.csdnimg.cn/blog_migrate/2ea975a8d421ce3226c46b0946fd5932.png)
Problem D - Maximum Product
Time Limit: 1 second
Given a sequence of integers S = {S1, S2, ..., Sn}, you should determine what is the value of the maximum positive product involving consecutive terms of S. If you cannot find a positive sequence, you should consider 0 as the value of the maximum product.
Input
Each test case starts with 1 ≤ N ≤ 18, the number of elements in a sequence. Each element Si is an integer such that -10 ≤ Si ≤ 10. Next line will have N integers, representing the value of each element in the sequence. There is a blank line after each test case. The input is terminated by end of file (EOF).
Output
For each test case you must print the message: Case #M: The maximum product is P., where M is the number of the test case, starting from 1, and P is the value of the maximum product. After each test case you must print a blank line.
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.【分析】
采用暴力枚举。连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。
需要注意两点:1、每次测试数据结果将会有一行空行输出;2、Maximum product 结果不能用 int 来存,否则可能出现溢出。
用java语言编写程序,代码如下:
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(new BufferedInputStream(System.in));
int kase = 0;
while(input.hasNext()) {
int n = input.nextInt();
int[] sq = new int[n];
for(int i = 0; i < n; i++)
sq[i] = input.nextInt();
long max = 0;
for(int i = 0; i < n; i++) {
long tempMax = 1;
for(int j = i; j < n; j++) {
tempMax *= sq[j];
if(tempMax > max)
max = tempMax;
}
}
System.out.println("Case #" + (++kase) + ": The maximum product is " + max + ".\n");
}
}
}