第9講 配列とfor文を利用して3次魔方陣を作ろう 
第2話 3次魔方陣の生成の考え方
さて、3次魔方陣はいかにしたら生成させることができるでしょうか。

2 9 4
7 5 3
6 1 8

コンピュータの力を持ってすれば、3次魔方陣程度であれば力業で生成させることができます。
力業というのは、

1 2 3
4 5 6
7 8 9


1 2 3
4 5 6
7 9 8


1 2 3
4 5 6
8 7 9


1 2 3
4 5 6
8 9 7


1 2 3
4 5 7
6 8 9



・・・






すべての場合を調べて、その中で魔方陣の条件
① 行(横)の合計がすべて15になっている
② 列(縦)の合計がすべて15になっている
③ 対角線の合計がすべ15になっている
ものを探し出せばよいというわけです。

全部の場合の数は、果たして何通りあるでしょうか。
これは1から9までの数字を並べる順列と同じ総数です。
123456789
123456798
123456879
123456897
123457689
123456879
123457698
    ・
    ・
    ・
ですから、すべての場合の数は、
9×8×7×・・・×2×1=362880
の計算から362880通りです。

1 2 3 4 5 6 7 8 9
                 

理由は以下の通りです。
1番目の入れることのできる数字は
123456789のどれでもよいので9通りです。
2番目のセルに入れることのできる数字は9個の数字から1番目に入れた数字を除いた8個が可能で8通りです。
3番目のセルに入れることのできる数字は9個の数字から1、2番目に入れた数字を除いた7個が可能で7通りです。
4番目のセルに入れることのできる数字は9個の数字から1、2、3番目に入れた数字を除いた6個が可能で6通りです。
                                ・
                                ・
                                ・
9番目のセルに入れることのできる数字は9個の数字から1、2、3、・・・、8番目に入れた数字を除いた1個が可能で1通りです。
したがって、9×8×7×・・・×2×1=362880通りという訳です。
では、すべての順列
123456789
123456798
123456879
123456897
123457689
123456879
123457698
    ・
    ・
    ・
を発生させるにはどうしたらよいでしょうか。
セルが9個

1 2 3 4 5 6 7 8 9
                 

あるので、for文で実現するとなると9次元ループになってしまうことがお分かりでしょうか。
それぞれのセルごとにfor文を考えなければならないからです。
いきなり9次次元ループを考えたのでは、初心者でなくても頭が混乱してしまいます。
そこで、順列
123
132
213
231
312
321
を発生させることを考えましょう。
個数が3の順列を3次順列と名付けます。

1 2 3
     

これならセル数は3ですから、for文は3次元ループになります。
データ数が3ですので、要素数が3
の1次元配列を用意して、実現してください。
実行画面
入門



第1話へ 第3話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部