给你N个数字,在 N 个数字中找出由三个数组成的最大乘积,并输出这个乘积。c++
3条回答 默认 最新
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
问题分析: 题目要求找出由三个数字组成的最大乘积,我们可以先对数组进行排序,然后考虑最大乘积可能出现的情况:- 三个正数相乘;
- 两个负数和一个正数相乘。 对于第一种情况,最大乘积显然是数组中最后三个数的乘积,对于第二种情况,最大乘积是数组中最后一个正数和数组中最后两个负数的乘积。 所以我们可以先将数组按从小到大的顺序排序,然后用两个变量记录最小的两个数和最大的三个数,然后比较两种情况的最大乘积即可。 代码实现:
#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
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用