晓君c++ 2024-03-31 20:14 采纳率: 70%
浏览 8
已结题

c++三个数的最大乘积

给你N个数字,在 N 个数字中找出由三个数组成的最大乘积,并输出这个乘积。c++

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-03-31 20:14
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 题目要求找出由三个数字组成的最大乘积,我们可以先对数组进行排序,然后考虑最大乘积可能出现的情况:
    1. 三个正数相乘;
    2. 两个负数和一个正数相乘。 对于第一种情况,最大乘积显然是数组中最后三个数的乘积,对于第二种情况,最大乘积是数组中最后一个正数和数组中最后两个负数的乘积。 所以我们可以先将数组按从小到大的顺序排序,然后用两个变量记录最小的两个数和最大的三个数,然后比较两种情况的最大乘积即可。 代码实现:
    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        vector<int> nums(n);
        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }
        sort(nums.begin(), nums.end());
        int max_product = max(nums[n-1] * nums[n-2] * nums[n-3], nums[n-1] * nums[0] * nums[1]);
        cout << max_product << endl;
        return 0;
    }
    

    案例: 输入:

    6
    -10 -2 1 10 20 30
    

    输出:

    6000
    

    解释: 数组从小到大排序为:-10 -2 1 10 20 30 其中最大的三个数是:10 20 30,乘积为6000 最后一个正数是30,数组中最后两个负数是-10 -2,乘积也是6000,取两种情况的最大乘积:6000

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日