以下の図でカードに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行だけ○が表示される。
コンピュータをどう利用するかは本人次第。コンピュータ否定派の人は累乗の計算とか電卓を使わず手でするのかな?
最近の小学校では電卓の使い方を教えるらしい。
それは時代の流れだと思ったけど,電卓を使って解く試験もあるって話を聞いてびっくりした。
隔世の感がある。
解速度
即