这就是我正在做的:
(1..999).each do |a|
(1..999).each do |b|
if Math.sqrt(a**2 + b**2) % 1 == 0 && a + b + Math.sqrt(a**2 + b**2) == 1000 && a >= b
puts a * b * Math.sqrt(a**2 + b**2)
end
end
end
正在发生的情况是, a
和 b
在公式中是可以互换的,所以有两种匹配,因此 puts
得到两次输出。要解决这个问题,我添加了 a>=b
,现在它只能输出一次。但是,如果 a= b
输出两次,那么,如果 a_b
it 输出两次。我知道在Im 使用的示例中, a 和 b 总是会不同, 但对我来说这看起来是糟糕的设计。
两个问题:
Ruby有更好的模式吗? 选择一个阵列, 比较自己?
我怎么能避免它输出两次ways 。我可以设定一个变量,如果在下一个循环开始之前更改,它就会破解。这是这样做的正确方式吗?