要求:10個任意整數(shù)(可以包含 0 或者負(fù)數(shù))
思路
/**數(shù)組排序算不寫,手動排序 999999 異常碼
*
*
*
* 負(fù)數(shù)個數(shù)不超過2個,取最大到三個正整數(shù)成績
*
* 負(fù)數(shù)個數(shù)超過2個,不超過6個,比較
* 最大到三個正整數(shù)成績,和1個正整數(shù)和2個負(fù)整數(shù)到乘積。
*
* 當(dāng)負(fù)數(shù)個數(shù)是7個,判斷是否包含0
*
*9個以上是負(fù)數(shù),取最大三個負(fù)數(shù)成績。另一個是0,結(jié)果是取0和任意2個數(shù)
* 如果不是0,則取三個最大負(fù)整數(shù)乘績。因?yàn)?在第一位
* 所以直接是 最大 和倒數(shù)1和2位乘積
*
* 10個負(fù)數(shù)直接最大當(dāng)3個負(fù)數(shù)乘積
*/
public static int getMul(int [] arr){
//負(fù)數(shù)個數(shù)不超過2個,取最大到三個正整數(shù)成績
if(getCount(arr)<=1){
return getMultiplication(arr[9],arr[8],arr[7]);
}
//負(fù)數(shù)個數(shù)超過2個,不超過6個,比較
//最大到三個正整數(shù)成績,和1個正整數(shù)和2個負(fù)整數(shù)到乘積。
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;
}
//負(fù)數(shù)個數(shù)是7個當(dāng)時候,需要判斷是否包含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;
}
}
//負(fù)數(shù)個數(shù)是8個當(dāng)時候,需要判斷是否包含
if(getCount(arr)==8){
return getMultiplication(arr[9],arr[1],arr[0]);
}
//負(fù)數(shù)個數(shù)是9個當(dāng)時候,
if(getCount(arr)>=9){
return getMultiplication(arr[9],arr[0],arr[1]);
}
//負(fù)數(shù)個數(shù)是10個當(dāng)時候,
if(getCount(arr)==10){
return getMultiplication(arr[9],arr[8],arr[7]);
}
return 99999;
}
//求負(fù)數(shù)個數(shù)
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 ;
}
//求三個數(shù)乘積
public static int getMultiplication(int x,int y ,int z){
return x*y*z;
}
}