第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部