Problem 4
左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。
Problem 4 - PukiWiki
では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。
a+b=一定のときaとbの値がもっとも近いときa*bが一番大きくなるので、そこからじゅんぐりに探して行きます。a+b=一定のとき、回文を見つける→それより大きいa*b(ただし=b or a=b+1)がなくなるまでの範囲で探して、その中で一番大きいものを解とする、ということです。
はいはい単純にやってみましたよ。もっと短くなる気がしますが.
def palindrome?(num) array = [] flag = true while num > 0 num,tmp = num.divmod(10) array.unshift(tmp) end while array.size > 0 flag = false and break if array.shift != array.pop end return flag end def find_palindrome(max) sumlimit = max*2 find_max_palindrome = 0 (0..99).each{|i| small = ((sumlimit-i)/2).to_i large = sumlimit-i - small break if(find_max_palindrome != 0 || find_max_palindrome > small* large) (0..(max-large)).each{|j| target = (large+j)*(small-j) if palindrome?(target) find_max_palindrome = [find_max_palindrome, target].max end } } return find_max_palindrome end p find_palindrome(999)
答え:906609