分析: 要考虑正负情况,真正影响结果的是五个数字,分别是最大的三个数,和最小的两个数。最大值应该为三个最大数字的积,或者最大数字与最小两个数字的积。这道题,没有找到用来测试的数据,我并不清楚答案对不对,欢迎大家指正。
代码:
int main(int argc, char* argv[])
{
// 测试数据
vector<int> nums{-5,-6,-7,0};
// 保存三个最大数和两个最小数,容器设置的大一点是为了方便排序
vector<int> numsMax(4,INT8_MIN);
vector<int> numsMin(3,INT8_MAX);
// 找出三个最大数字与两个最小数字
for(int i = 0;i < nums.size();++i){
numsMax[0] = nums[i];
sort(numsMax.begin(),numsMax.end());
numsMin[2] = nums[i];
sort(numsMin.begin(),numsMin.end());
}
// 分别计算三个最大数字的积,与一个最大数字与两个最小数字的积
int res1 = numsMax[1] * numsMax[2] * numsMax[3];
int res2 = numsMax[3] * numsMin[0] * numsMin[1];
// 哪个大,哪个就是正确答案
cout << max(res1,res2) << endl;
return 0;
}