2014-09-26 108 views
0

我碰到這個片段在網上,而研究各種方法來測試一個數字是一個完美的正方形:如何判斷一個數字是否與ruby一致?

如果n是一個完美的方形那麼一致爲0,1或2模4

我試圖用三元語句將它翻譯成ruby代碼(見下文),但它無法正常工作。

n % 4 == 0 && n % 4 == 1 && n % 4 == 2 ? true : false 

你會怎麼做?

+1

很好的答案,也是你要注意,你使用&&(AND)而不是|| (OR)... n%4 == 0 && n%4 == 1總是WRONG(它可以同時爲0和1),而n%4 == 0 || n%4 == 1是可以的。 – tomsoft 2014-09-26 12:55:51

+0

是的。我注意到。我的第一個版本實際上使用了ORs。根本不瞭解模塊化算術。 – adeluccar 2014-09-26 13:24:06

+2

另一個建議:使用括號,除非你真的確定了運算符的優先級。另外,不需要使用三元運算符?與真或假作爲運營商的輸入已經是真的或假的 – tomsoft 2014-09-26 13:28:52

回答

3

您的文檔片斷說:「方法...是一致的到0,1 2 mod 4「但你'重新使用&&。改變這種以||修復你的表達:

n % 4 == 0 || n % 4 == 1 || n % 4 == 2 ? true : false 

三元語句是多餘的,因爲你已經有了一個布爾結果。它等同於:

n % 4 == 0 || n % 4 == 1 || n % 4 == 2 

此外n % 4返回或者0123任何n,所以它也可以表示爲:下面

n % 4 <= 2 # because 0, 1, 2 are less or equal to 2 
n % 4 < 3 # because 0, 1, 2 are less than 3 
n % 4 != 3 # because 0, 1, 2 are not 3 
+0

哇!謝謝。這個答案非常完整,它使我能夠更好地理解我的方法中的多個問題。 – adeluccar 2014-09-26 13:21:53

-1

試試這個:

(0..2).include?(n % 4) 
+0

沒關係,@tokland的解決方案好得多 – 2014-09-26 12:37:00

3

你可以這樣寫:

n % 4 <= 2 
0

您可以通過以下方式

n % 4 < = 2 
相關問題