2014-01-16 16 views
1

我想找一個邏輯來找到五個給定數字的第三大數字,而不使用數組或循環,但可以使用條件。找到五個給定數字中的第三大而不使用數組或循環的最快方法?

Here是stephen c找到三元組中值的最快方法。我想爲5個數字創建一個邏輯以找到第三大數字。

我想盡可能減少比較以找到最佳解決方案。

+1

有趣的是,這裏會發現一個瘋子嗎? :) – dvvrd

+0

我猜你必須做的比較數量呈指數增長,所以要準備好真正難看的代碼。 – zapl

+1

使用遞歸方法怎麼樣?它被認爲是_loop_? ;-) – Baby

回答

1

這個怎麼樣?

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個號碼的價值,我強烈地認爲,你不能降低你必須做總的比較,但你只能簡化或優化你做的比較方式。

1

不是最高效的,但至少它是可讀的。

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; 
} 
相關問題