Date: 2008-04-02
Tags: python

四角い頭を丸くする算数の問題をPythonで解いてみる

今日、電車で見かけた算数の問題。

回文数

"121" や "3333" のように右から読んでも左から読んでも同じ並びになる数値を回文数とよぶことにします。 この回文数について以下の問いに答えなさい。

問い1

5を掛けると回文数となる、3桁の数値のうち最大の数値を答えなさい。

この問題をPythonでプログラムを書いて解いてしまったんだけど、落ち着いて考えれば暗算で解けそう。というか後から考えてみたら暗算で解けた。あああ、もったいないことをした。

ということで以下コード。

In [1]: def check(n):
   ...:     sn = str(n)
   ...:     for i,s in enumerate(sn):
   ...:         if sn[-(i+1)] != s:
   ...:             return False
   ...:     return True

In [2]: for n in range(999,0,-1):
   ...:     if check(n*5):
   ...:         print n, n*5
   ...:         break
   ...:
119 595

答えは119らしい。5倍した回文数は595。実はもっと大きな値になると思っていた。

今度は証明っぽく解いてみる。長いこと証明書いてないので書き方の定石は忘れちゃった。

問い1の証明

最大値が999なので、5倍した最大値は4995。ところで5倍すると言うことは下一桁がかならず0か5になるので、最上位桁も0か5にならねばならない。しかし最上位桁が0というのはこの場合あり得ないため、下一桁は5であると言える。また、5倍した値が4桁だと仮定すると積は5000~5999ということになるが、最大を超えるのでこれもありえない。

ここで3桁で最上位桁が5の値について考えると、商は5n5となり、nは0~9どれでも5で割れるので、最大値の9を採用する。

以上により、商=595, 解=595/5=119.

とけた。ポイントが分かれば簡単やね。

書き写し間違ってるかもしれないけど問い2、問い3。また電車の中で考えよう...

問い2

15で割り切れる3桁の回文数のうち、最も大きい数を答えなさい。なお答えに至る過程についても述べなさい。

問い3

15で割り切れる4桁の回文数のうち、商が回文数となる値を答えなさい

# 回文数で検索するとけっこうヒットする

../../_images/20080402_boueishou.jpg