озадачен проблемой палиндромного продукта

Я изучал Руби, поэтому я решил попробовать свои силы в некоторых из задач проекта Эйлера. Смущающе, я только добрался до задачи 4 ...

Задача 4 выглядит следующим образом:

Палиндромное число читается так же в обе стороны. Самый большой палиндром сделан из произведения двух 2-значных числа 9009 = 91 × 99.

Найдите самый большой палиндром из произведение двух 3-значных чисел.

Итак, я решил, что зациклился бы с 999 до 100 во вложенном цикле for и выполнил бы тест на палиндром, а затем вырвался из циклов, когда нашел первый (который должно быть наибольшим):

final=nil
range = 100...1000
for a in range.to_a.reverse do
  for b in range.to_a.reverse do
    c=a*b
    final=c if c.to_s == c.to_s.reverse
    break if !final.nil?
  end
  break if !final.nil?
end
puts final

Это выдает палиндром 580085, но, очевидно, это не самое высокое произведение двух трехзначных чисел в пределах диапазона. Как ни странно, тот же код успешно возвращает 9009, как в примере, если я изменю диапазон на 10 ... 100.

  • Может кто-нибудь сказать мне, куда я иду? неправильно?
  • Кроме того, есть ли лучший способ вырваться из внутреннего цикла?

Спасибо

5
задан Zero Piraeus 22 January 2015 в 18:29
поделиться