4 つの数を足して 10 にする

[戻る]

ある飲み会の席で「1 と 1 と 9 と 9 を四則演算の組み合わせで 10 を作る方法」 という問題を出されました.

まぁ, この手の問題は車のナンバや切符などで昔からよくやっていたものでしたが, 今まで私はべき乗も可というルールだったので, 大体「1 と 9」もしくは「0 と 9」を探し, それで 10 を作るという技で逃げてました. (1 を残りの数でべき乗し 1 にし 9 を足す / 残りの数を 0 でべき乗して 1 にし 9 と足す) . ところが今回はべき乗は駄目で四則 (足す/引く/かける/割る) のみで 行わないといけないルールです. 酒も入っていたせいか, 解くのにえらい時間がかかってしまい悔しい思いをしました (ちなみにある意味発想の転換が必要です).

問題を解いている最中, 時々思考は 「コンピュータがあれば, 総当りプログラムを作って 解かした方が考えるより速いんじゃないか, どうやったら作れるかな. 」 ということに飛んでました. その考えは帰りの電車で具現化し, せっかく作るのなら 0000 から 9999 までの解法一覧を作っちまえと思いました.

まとめてみると, 計算を「 a [演算子 1] b [演算子 2] c [演算子 3] d 」と表したとして,

  1. 演算子 1〜3 は +−×÷の四通りあるから 64 通り
  2. 計算順は 123, 132, 213, 231, 312, 321 の 6 通りだが 132 と 312 は同じだから結局 5 通り
  3. さらに変数が 4 つあるから並びは 24 通り
というわけで 10000 x 64 x 5 x 24 = 7680 万回の計算で総当たりができそうです.

でもまぁこれだとあまり美しくないので,

など, いろいろ工夫しましたがまぁそれはそれ, 結果には関係ありません.

結果は こちら です. 1158 とか「なるほど」と思っちゃいました. まぁだから何だと言われるとそれまでですが, 人間たまにはバカやらなくちゃ!

さてこれをポケットに入れておけば, 今度の飲み会は怖くないぞっと.

【広告】 この知見を利用して社会実験も兼ねて Androidアプリを作ってみました. よろしければどーぞ :-p


2005.6