long long solve(int* A, int ALen ) {
// write code here
int a;
int b;
int c;
long long max=-1000000000000;
for(a=0;a<ALen;a++)
{
for(b=a+1;b<ALen;b++)
{
for(c=b+1;c<ALen;c++)
{
max=max>A[a]*A[b]*A[c]? max:A[a]*A[b]*A[c];
}
}
}
return max;
}
// 方法一,遍历所有的情况,比较大小,评论:不适用所用情况
// 方法二,先从小到大排序,最后一个数如果是正值,那么增益效果最大,如果是负值,那么衰减效果是最小的,所以这三个数的乘积必须带有最后一个数,
//
// 乘积最大的数由三个变成选两个,由奇数变成偶数,同时排列是线性的,无论正负,中间数的乘积没有两端的其中一端大:这两端的乘积只可能是第一个*第二个,或者倒数第二个*第三个。
void Buble(int *arr,int n){
int ii;//循环的次数
int jj;//每次循环的次数
for(ii=n-1;ii>0;ii--){
for(jj=0;jj<ii;jj++){
if(arr[jj]>arr[jj+1]){//从小到大
int tmp;//换
tmp=arr[jj];
arr[jj]=arr[jj+1];
arr[jj+1]=tmp;
}
}
}
}
long long solve(int *A, int ALen) {
// 先排序
Buble(A,ALen);
//比较大小
long sum;
if(A[0]*A[1]>A[ALen-2]*A[ALen-3]){
sum=A[0]*A[1]*A[ALen-1];
}
else{
sum=A[ALen-2]*A[ALen-3]*A[ALen-1];
}
return sum;
}