1
我想找一個邏輯來找到五個給定數字的第三大數字,而不使用數組或循環,但可以使用條件。找到五個給定數字中的第三大而不使用數組或循環的最快方法?
Here是stephen c找到三元組中值的最快方法。我想爲5個數字創建一個邏輯以找到第三大數字。
我想盡可能減少比較以找到最佳解決方案。
我想找一個邏輯來找到五個給定數字的第三大數字,而不使用數組或循環,但可以使用條件。找到五個給定數字中的第三大而不使用數組或循環的最快方法?
Here是stephen c找到三元組中值的最快方法。我想爲5個數字創建一個邏輯以找到第三大數字。
我想盡可能減少比較以找到最佳解決方案。
這個怎麼樣?
public static int getMiddle(int a, int b, int c, int d, int e){
int temp;
if(a>b){
temp=b; b=a; a=temp;
}
if(b>c){
temp=c; c=b; b=temp;
}
if(c>d){
temp=d; d=c; c=temp;
}
if(d>e){
temp=e; e=d; d=temp;
}
if(e>d && d>c && c>b && b>a)
return c;
else
return getMiddle(a, b, c, d, e);
}
注:根據5個號碼的價值,我強烈地認爲,你不能降低你必須做總的比較,但你只能簡化或優化你做的比較方式。
不是最高效的,但至少它是可讀的。
int median(int a, int b, int c, int d, int e)
{
if (a > b) swap(a, b);
if (a > c) swap(a, c);
if (a > d) swap(a, d);
if (a > e) swap(a, e);
if (b > c) swap(b, c);
if (b > d) swap(b, d);
if (b > e) swap(b, e);
if (c > d) swap(c, d);
if (c > e) swap(c, e);
return c;
}
有趣的是,這裏會發現一個瘋子嗎? :) – dvvrd
我猜你必須做的比較數量呈指數增長,所以要準備好真正難看的代碼。 – zapl
使用遞歸方法怎麼樣?它被認爲是_loop_? ;-) – Baby