以下の計算式で2桁の数字が何れもぞろ目となるのはどのような時か。
以下の様になるのはどんなときかということ。
Aが1〜9,Bが1〜9の合計81通りの虱潰し問題。
for( int a=1; a<= 9; a++) { for( int b=1; b<= 9; b++) { int x = (10*a+a)*(10*b+b); int c1 = (x/1000)%10; int c2 = (x/100)%10; int d1 = (x/10)%10; int d2 = (x/1)%10; // c1,c2がぞろ目,d1,d2がぞろ目となる制約を書く。 // その後,c1,c2,d1,d2から同じような計算式で,e1,e2,f1,f2を求めぞろ目となるか調べる。 } }
今回は毛色を変えてEXCELを使って解く方法を示します。
行,列のどちらがaa,bbでも良いのですが,行をaa,列をbbとしてEXCELで表を作ってみましょう。
計算結果を表示するのはまずB2の位置に「=$A2*B$1」という式を入れる。
Aの前に$,1の前に$を入れるのがポイント。これをコピーして,他の計算結果の所にも入れると以下の表が完成する。
計算結果の表を見て自分の目でぞろ目を探しても良いが,プログラマはぞろ目を自動で表示することを考える。
別のセルに以下のような式を代入する。
=IF(INT(MOD(B2/1000,10))=INT(MOD(B2/100,10)),B2,"")
これを81個分コピーすると,おっ,綺麗にぞろ目が表示されたぞ。
後は33*88,77*44の計算をすればOK。
今回4桁中の上位2桁のぞろ目しか判定していないが,それだけで下位2桁もぞろ目のものしか表示されなかった。下位2桁がぞろ目で表示されなければ更に下位2桁がぞろ目であることの制約式を書けば良い。
コンピュータを使って解くってことはCやPerlのプログラムを作ることだけではありません。CやPerl以外でも使えるものは何でも使いましょう。