#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
// long 类型
long long fun(vector<long long> &arr){
long long res = 1;
long long maxNums[3] = {0, 0, 0}; // 三个最大的正数 并按照大小顺序依次排列
long long minNums[2] = {0, 0}; // 两个最小的负数 同上
int len = arr.size();
int i, j, k;
if(arr.size()==3){
return arr[0]*arr[1]*arr[2];
}
for(i = 0; i < len; i++){
if(arr[i] < 0){
for(j = 1; j >=0; --j){
// 当前项和 minNums 第一项开始比较
// 如果 arr 小 则 插入到 minNums 当前项同时把最后一项删除
if(minNums[j] > arr[i]){
minNums[j]=arr[i];
sort(minNums,minNums+2);
break;
}
}
}else {
for(k = 0; k <= 2; ++k){
if(maxNums[k] < arr[i]){
//maxNums.splice(k + 1, 0, arr[i]);
//maxNums.shift();
maxNums[k] = arr[i];
sort(maxNums,maxNums+3);
break;
}
}
}
}
if(maxNums[0] * maxNums[1] > minNums[0] * minNums[1]){
res = maxNums[0]*maxNums[1]*maxNums[2];
}else {
res = maxNums[2]*minNums[0]*minNums[1];
}
return res;
}
int main(){
int n;
while(cin>>n){
vector<long long> ivec(n);
for(int i=0;i<n;++i){
cin>>ivec[i];
}
if(n<3){
continue;
}
int len=ivec.size();
cout<<fun(ivec)<<endl;
}
return 0;
}
三个数的乘最大
猜你喜欢
转载自blog.csdn.net/u010325193/article/details/86517669
今日推荐
周排行