我想找到红宝石中三位数字乘积的最高回文数。基本的伪代码将是:
从 999 开始,下降到 100
将每个数字相乘
如果数字的反面与数字相同,则停止。
这是我写的 ruby 代码,似乎不起作用,有什么问题
start = 100; stop = 999;
stop.downto(start) do |i|
stop.downto(start) do |j|
nm = i*j
nms = nm.to_s
if nms == nms.reverse
puts nms
end
break
end
end
更新
感谢大家指出漏洞。以下是我想出的,它的工作原理:
def top_down_palin
maxi = -999
arr = []
start = 100; stop = 999;
stop.downto(start) do |i|
i.downto(start) do |j|
nm = i*j
nms = nm.to_s
if nms == nms.reverse
if nm > maxi
maxi = nm
end
end
end
end
puts maxi
end
对我来说,自上而下似乎比自下而上(塞尔吉奥的方法)更快,因此我做了时间分析:
def time
start = Time.now
yield
puts Time.now - start
end
在我的系统上,自上而下的方法需要0.614742 秒,而自下而上的方法需要0.839568 秒。