2015-11-05 98 views
0

這已經有一段時間,因爲我使用C#(2年),我試圖找到解決這一問題的最有效方法。實現close_far解決方案邏輯

http://codingbat.com/prob/p160533

問題陳述:

鑑於3個整數,ABC,返回真,如果一個 的B或C是 「關閉」(由至多1從不同的) , 而另一個是「遠」,與其他 值不同,爲2或更多。注意:abs(num)計算一個數字的絕對值。

close_far(1,2,10)→真
close_far(1,2,3)→假
close_far(4,1,3)→真

我使用Visual Studio社區2015 。

我剛開始出來,這不是學校,這是工作的鍛鍊。

任何幫助,將不勝感激。

+2

這會是給大家更多的有益的,如果你有這個問題本身內部的外部鏈接的內容,以及到目前爲止,你已經嘗試了什麼,使其工作,並在你當前卡住。 –

+3

此外,這不是一個需求網站上的代碼。請詳細說明您嘗試解決問題以及您需要幫助的問題。 – Greg

+0

增加了這個問題,我還沒有真正嘗試過任何東西,我只是想開始獲得不同的想法,並採取別人如何做到這一點。不過,我現在開始。 – Solid1Snake1

回答

1

這會有幫助嗎?雖然我相信你肯定已經弄清楚了這樣的事情。

public static bool Foo(int a, int b, int c) 
{ 
    var x = Math.Abs(a-b); 
    var z = Math.Abs(c-a); 

    var close = x>z?c:b; 
    var far = x>z?b:c; 

    return Math.Abs(close-a)<=1 
      && Math.Abs(far-a)>=2 
      && Math.Abs(far-close)>=2; 
} 
+0

這與我正在做的很接近,但我沒有添加Math.Abs​​,爲什麼要獲取絕對值? 此外,我在一行中做了更多,我更喜歡你,更容易閱讀。 – Solid1Snake1

+0

剛剛引起我的注意,'var y'不是必需的。 – singsuyash

1

我會解決這個問題是這樣的:

private static bool closeFar(int a, int b, int c) 
    { 
     bool bIsNear = Math.Abs(a - b) <= 1; 
     bool cIsNear = Math.Abs(a - c) <= 1; 
     if (!(bIsNear^cIsNear)) 
     { 
      return false; 
     } 
     int far = bIsNear ? c : b; 
     return Math.Abs(far - a) >= 2 && Math.Abs(c - b) >= 2; 
    } 

只是因爲這是幾次在那裏我可以使用XOR運算符之一。