(暴力枚举) UVa 11059 Maximum Product
(暴力枚举) UVa 11059 Maximum Product
题目:
题目大概的意思就是给定一个序列,序列长度不超过18,序列也每个元素都是-10和10之间的数。求最大的连续序列乘积。
分析:
看到这道题首先想到的就是暴力枚举进行求解。(注意因为最大可能会出现10^18,所以用long long类型)
枚举对象: 由题意可知,枚举对象为连续序列的起点终点(这题有点坑,如果是两个数,一正一负,那么起点和终点相等的时候也就是单个正数的时候是最大的,但是能不能这样呢,最求试了两个情况,答案是起点可以等于终点。)
枚举范围:对于起点 int a -> [0,n-1] , 对于终点 int b -> [a,n-1]
判断条件: 每次枚举与之前的乘积比取较大的一个,用一个Max();就可以实现。
实现代码:
#include <iostream> using namespace std; long long judge(long long a, long long b) { if (a >= b) return a; else return b; } int count = 1; int main( int argc, char const *argv[] ) { int n; while ( cin >> n ) { int S[19] = {0}; for ( int i = 0; i < n; ++i ) { cin >> S[i]; } long long result = S[0] * S[1]; for ( int i = 0; i <= n - 1; ++i ) { for ( int j = i; j <= n - 1; ++j ) { long long temp = 1; for ( int k = i; k <= j; ++k ) { temp *= S[k]; } result = judge(result, temp); } } cout << "Case #" << count ++ << ": The maximum product is " << result << endl; cout << endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。By PengCoX ( Pengc825@foxmail.com )