迭代顺序

时间:2015-07-06 14:05:14

标签: ruby

我正在研究Project Euler问题#4:

  

回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。

     

找出由两个3位数字的乘积制成的最大回文。

我的代码如下:

def ispalindrome?(number)
  number.to_s == number.to_s.reverse
end

palindromes = []
(100..999).each { |x|
  (100..999).each { |y|
    palindromes.push (x * y) if ispalindrome?(x * y)
  }
}   
palindromes.last # => 580085

这里发生了什么?

4 个答案:

答案 0 :(得分:2)

这与ruby无关。简单的数学:)

palindromes.last替换为palindromes.max

答案 1 :(得分:0)

你只是忘了在获取数值之前对数组进行排序,我使用了刚刚添加的第一次尝试的代码

palindromes.sort

它给了我906609

答案 2 :(得分:0)

正如其他人所说,将palindromes.last替换为palindromes.max即可。

原因是,作为三位数的产品,580085 = 995 * 583和906609 = 993 * 913。

仔细考虑您考虑成对xy的顺序。如果您考虑(993, 913)然后考虑(995, 583)(如第一个和第三个示例中所示),那么找到的最后一个回文将是580085

答案 3 :(得分:0)

问题在于你没有返回最大数字,而是返回最后添加的数字,这取决于你循环数字的顺序。

您需要将上一个命令更改为:

puts palindromes.max