2014-09-26 97 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 
相关问题