朝日新聞2006年7月14日のパズル横丁問題

問題

以下の図でカードに1〜9の数字が書かれている。線上で隣り合うカードは連続している(差が1か,8である)。計算式が成り立つようにする。

解答への道(ヒント)

それほど計算量も無いのでEXCELとかでも簡単に出来そう。

カードにA〜Iまでラベルを貼り,Aに1〜9までの数字を虱潰す。

肝になる部分は以下の通り。

int num[9] = { 1,2,3,4,5,6,7,8,9}; // 数字は順に並んでいる
for( 9回ローテートしてnum[0]に1〜9の数字全てを割り当てて調べる) {
  int a = num[0];             // 判りやすく文字に割り当てる
  int b = num[1];
  int c = num[2];
  int d = num[3];
  int e = num[4];
  int f = num[5];
  int g = num[6];
  int h = num[7];
  int i = num[8];
  int x = a*100 + b*10 + i;
  int y = f*100 + d*10 + e;
  int z = pow3( g*10 + c, h); // (g*10+c)**h
  if( x * y == z) {           // 計算式が等しいか?
    ps( "Find\n");
    ps( "%d%d%d x %d%d%d = %d%d ^ %d\n", a, b, i, f, d, e, g, c, h);
  }
  // num[]に入った数字をローテートする
  ………
}

最初答えが出なくて焦った。

A,B,Cの順に数字は並んでいるけど,昇順とは限らないってこと。

答えは1件出力されました。

 

試しにEXCELでもやってみました。VBAは使いません。

まずは以下のような表を作る。

表は連続データの作成で1行目(昇順)と10行目(降順)を作成し,後はカット&ペースト。

J,K,Lに計算式を入れる。1行目だけ計算式を入れ後はカット&ペースト。幸いEXCELには累乗(冪乗)を計算するPOWER関数があるので,それをそのまま利用する。

Jは「=A1*100+B1*10+I1」,Kは「=F1*100+D1*10+E1」,Lは「=POWER(G1*10+C1,H1)」。

Mは計算式が合っているかどうかを調べる以下の式を書く。

=IF(J1*K1=L1,"○","")

そうするとM列に1行だけ○が表示される。

コンピュータをどう利用するかは本人次第。コンピュータ否定派の人は累乗の計算とか電卓を使わず手でするのかな?

 

最近の小学校では電卓の使い方を教えるらしい。

それは時代の流れだと思ったけど,電卓を使って解く試験もあるって話を聞いてびっくりした。

隔世の感がある。

解速度