三个数的乘积最大值

寻找 3 个数的最大乘积

题目描述

实现一个算法在数组中找到 3 个数字的最大乘积。介绍如下:

  • 例如数组 [5, -2, 3, 1, -1, 4] 中 3 个数字的最大乘积为 60。

输入描述

第一行为数字 � (3≤�≤1000)N (3≤N≤1000),表示数组元素的个数。

第二行为数组元素 ��Ai​,−1000≤��≤1000−1000≤Ai​≤1000。

输出描述

输出一行,为 3 个数字的最大乘积。

输入输出样例

示例

输入

6
5 -2 3 1 -1 4

输出

60

 解法一:直接暴力for循环

ans必须要设置成大小的负数值,因为当数组是奇数个全是负数时,乘积最大值一定为负数。

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int arr[2005];
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    int ans = -10005;
    for (int i = 0; i < n; i++) {
        for (int q = i + 1; q < n; q++) {
            for (int p = q + 1; p < n; p++) {
                ans =(int)fmax(ans, arr[i] * arr[q] * arr[p]);
            }
        }
    }
    printf("%d", ans);
    return 0;
}

解法二:

整数数组的三数之积

全正数: 1,2,3,4,5 乘积最大值(3*4*5)三个最大值
全负数: -5,-4,-3,-2,-1 -1、-2、-3 三个最大值
正负数: -1,1,2,3,4 2,3,4 三个最大值
正负数:-4,-3,-2,-1,1 -4,-3,1 两最小、一最大

情况数组结果描述
全正数1,2,3,4,53 * 4 * 5三个最大值
全负数-5,-4,-3,-2,-1-3 * -2 * -1三个最大值
正负数-1,1,2,3,42 * 3 * 4三个最大值
正负数-4,-3,-2,-1,1-4 * -3 * 1两最大一最小值

所以结果为max((max1 * max2 * max3) , (min1 * min2 * max3))
找出数组中的三个最大值和两个最小值即可

 

#include<iostream>
#include<algorithm>
using namespace std;
int a[2005];
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    sort(a, a + n);
    int ans = max(a[0] * a[1] * a[n - 1], a[n - 1] * a[n - 2] * a[n - 3]);
    cout << ans;
    return 0;
}

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值