4数を四則で10に

プログラムの仕組み
 @ サブルーチンの説明
1.初期設定
 Y(24,4)へ入力する4つの数字の順列を入れる。4つの数字の順列は、4*3*2*1=24通りあるので添え字が24、順番を4つ入れるのでもう1つの添え字が4となっている。
 次に、E(5,3)へどの2つの数を計算するのかを入れる。計算の順番は5通りあるので添え字が5、3回計算すると答えがでるので、もう1つの添え字が3となっている。
 F$(3)へ演算記号(+-*/)を入れる。添え字が0,1,2,3の4つへ。
 P$(5)へprint usingで使う印刷形式を入れる。

2.数字の順番の組合せ
 Y(24,4)の順番に従って、M(24,4)へ入力された数字を入れていく。
例えば、入力された数字が3,4,5,6ならば、
Y(1,1-4)に1,2,3,4が入っているから、M(1,1-4)にはそのまま3,4,5,6が、次のY(2,1-4)に1,2,4,3が入っているから、M(2,1-4)には3,4,6,5が入る。
 このように、最後のM(24,1-4)には6,5,4,3が入る。
 そして、入力された4つの数字の中に同じ数字が入っていたら、同じ順番の数字の組合せがあるので、それを除く。M(*,1)に-1を入力して。

3.式の準備
 2.で4つの数字の順番を24通り決めた。その4つの数字の間の計算をここで決める。4つの演算があるし3箇所演算記号を入れるので4*4*4=64通りある。
 例えば3,4,5,6ならば、3+4+5+6、3+4+5-6から3/4/5/6まで決め、A(64,8)に入れる。A(*,1)・・3(最初の数)  A(*,2)・・”+”
      A(*,3)・・4(2番目の数) A(*,4)・・”+”
           ・・・
      A(*,7)・・6(最後の数)  A(*,8)・・常に0

4.計算結果の判定出力
 計算結果が10になれば、どの計算順序かによって出力する。
1+(1/9))*9が正確に10にならないので9.999以上10.0001以下を10としている。

5.計算
 計算をする。0での除法は計算結果を0として進める。
 次に、前につめる。例えば A(*,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8
              3 + 4 + 5 + 6 0
前から順番に計算する場合は 7 + 5 + 6 0 0 0
              12 + 6 0 0 0 0 0
最後は           18 0 0 0 0 0 0 0
となる。

 A メインルーチンの説明  4つの数字を入力し、数字の順番の組合せを決め、その24回を繰り返す。
 前計算した数字の組と同じなら次の組合せに行く。
 数字の3つの間に演算記号を入れる。その64回を繰り返す。
 どの2つの数字から計算するかの5つの場合を繰り返す。
 その演算の順番に従って、3回計算をして答えを出す。
 その式の答えを10であるか判定し、よければ出力する。

 B 変数一覧表
   Y(24,4) 4つの数字の順番 24通り
   E(5,3) 計算の順番 5通り   3+4+5+6で
      前から順に       @ 7  +5+6
                    12   +6
        計算をしたら前へつめるので 2,2,2となる。
           2番目ばかりを計算していればよい。
      中>前>後ろ      A 3+9  +6
                    12   +6
          同様に4,2,2となる。
      前の2つと後ろの2つからB 7  +11
          同様に2,4,2となる。
      中>後ろ>前      C 3+9  +6
                    3+15
          同様に4,4,2となる。
      後ろから順に      D 3+4+11
                    3+15
          同様に6,4,2となる。
   F$(3) 演算記号 4種類
   P$(5) 計算の順番を分かるように括弧を使った文字列。
        print using文で使う。
   N(4) 入力した4つの数字
   M(24,4) Y(24,4)の順番に従って、入力した4つの数字を並び直したもの。24通りになる。
   A(64,8) M(24,4)の24通りの1つずつについて、演算記号を数の間に入れた式。64通りある。
   B(8) A(*,8)を入れて、計算用の配列
   X 何番目の演算をするのか@−C
   H,I,J,K,L・・・ループ変数


[ 戻る ]