要求:10个任意整数(可以包含 0 或者负数)
思路
/**数组排序算不写,手动排序 999999 异常码
*
*
*
* 负数个数不超过2个,取最大到三个正整数成绩
*
* 负数个数超过2个,不超过6个,比较
* 最大到三个正整数成绩,和1个正整数和2个负整数到乘积。
*
* 当负数个数是7个,判断是否包含0
*
*9个以上是负数,取最大三个负数成绩。另一个是0,结果是取0和任意2个数
* 如果不是0,则取三个最大负整数乘绩。因为0在第一位
* 所以直接是 最大 和倒数1和2位乘积
*
* 10个负数直接最大当3个负数乘积
*/
public static int getMul(int [] arr){
//负数个数不超过2个,取最大到三个正整数成绩
if(getCount(arr)<=1){
return getMultiplication(arr[9],arr[8],arr[7]);
}
//负数个数超过2个,不超过6个,比较
//最大到三个正整数成绩,和1个正整数和2个负整数到乘积。
if(getCount(arr)>1&&getCount(arr)<7){
int x= getMultiplication(arr[9],arr[8],arr[7]);
int y=getMultiplication(arr[9],arr[1],arr[0]);
return x>y?x:y;
}
//负数个数是7个当时候,需要判断是否包含0,包含0,
if(getCount(arr)==7){
if(isContaintX(arr,0)){
return 0;
} else {
int x= getMultiplication(arr[9],arr[8],arr[7]);
int y=getMultiplication(arr[9],arr[1],arr[0]);
return x>y?x:y;
}
}
//负数个数是8个当时候,需要判断是否包含
if(getCount(arr)==8){
return getMultiplication(arr[9],arr[1],arr[0]);
}
//负数个数是9个当时候,
if(getCount(arr)>=9){
return getMultiplication(arr[9],arr[0],arr[1]);
}
//负数个数是10个当时候,
if(getCount(arr)==10){
return getMultiplication(arr[9],arr[8],arr[7]);
}
return 99999;
}
//求负数个数
public static int getCount(int [] arr){
if(arr == null) return 0;
int count = 0;
for(int i = 0 ; i < arr.length; i++){
if(arr[i] < 0) count++;
}
return count;
}
//判断是否包含0
public static boolean isContaintX(int [] arr,int x){
boolean result=false;
if(arr == null) return result;
int count = 0;
for(int i = 0 ; i < arr.length; i++){
if(arr[i] ==x){
result=true;
return result ;
}
}
return result ;
}
//求三个数乘积
public static int getMultiplication(int x,int y ,int z){
return x*y*z;
}
}
网友评论