(暴力枚举) 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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值