我正在研究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
这里发生了什么?
答案 0 :(得分:2)
这与ruby无关。简单的数学:)
将palindromes.last
替换为palindromes.max
答案 1 :(得分:0)
你只是忘了在获取数值之前对数组进行排序,我使用了刚刚添加的第一次尝试的代码
palindromes.sort
它给了我906609
答案 2 :(得分:0)
正如其他人所说,将palindromes.last
替换为palindromes.max
即可。
原因是,作为三位数的产品,580085 = 995 * 583和906609 = 993 * 913。
仔细考虑您考虑成对x
和y
的顺序。如果您考虑(993, 913)
然后考虑(995, 583)
(如第一个和第三个示例中所示),那么找到的最后一个回文将是580085
。
答案 3 :(得分:0)
问题在于你没有返回最大数字,而是返回最后添加的数字,这取决于你循环数字的顺序。
您需要将上一个命令更改为:
puts palindromes.max