這裏工作的每個元素是我在做什麼:如何採取一個數組,並互相元素
(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在我使用的例子中總是不一樣,但這對我來說似乎是不好的設計。
兩個問題:
是否有紅寶石採取一個數組,並將其與它自己一個更好的模式?
我怎樣才能避免它輸出兩次總是。我可以設置一個變量,如果在下一個循環開始之前發生變化,就會發生變化。這是做到這一點的正確方法嗎?
我認爲你有一個問題的唯一原因是,你使用的是預(與第一和第二的數組的數組每塊)定義的數字範圍。你會一直這樣嗎?如果數組內容不可預測,並且您希望每個組合之間的歐幾里得距離(看起來就是您正在尋找的),那麼您將不得不做這種計算。也許你可以使用[narray](http://stackoverflow.com/questions/5653994/ruby-equivalent-of-numpy)來抽象你的矩陣乘法? – KobeJohn
@kobejohn這是歐拉項目的一部分(準確地說問題9)。但我認爲代碼並不像它那樣乾淨。想看看我能否改進一下。所以,是的,我知道它總是在1到999之間,但這不是爲了工業實力。 –
我明白了。我錯了,我錯過了第1點:它實際上是相同的陣列。 austinbv的解決方案是一個很好的證明ruby的靈活性和可讀性,當正確完成! – KobeJohn