マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第6章 6次魔方陣・8次魔方陣の作成
第3話 自然配列を実行するコード
自然配列(※自然配列とは、1 から n×n までの数字を順番に並べた配列のことです。
一般の用語ではなく私のオリジナルです)

を実現するコード例
#include<iostream>//インクルードファイルiostreamの読み込み
#include<conio.h>//while(!_kbhit());を使うためのお呪い
#include<string> //文字列変数を使えるようにするために組み込む
#include <iomanip> //setprecisionを使えるように組み込む
#include <cmath>//powなどを使うときに必要
#include <ctime>//time()(←現時刻発生する関数)を使うために必要
using namespace std;//coutを使うときに必要なお呪い
void 魔方陣();//横と縦の2方向を持つ2次元for文体験
const int n = 6;//これからは具体的な数字を使わずにnとする。左の6を8などに変更すれば8次魔方陣に対応する
//const int とは定数ということです。
//n = 6 の一か所だけ具体的な数字を使い、他ではすべて n を使ってください。
int main() {//私は社長だ。
魔方陣();
while (!_kbhit());//待機させるための命令
return(0);//int main()終わるためのお呪い
}
void 魔方陣() {
int 2次元配列[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
2次元配列[i][j] = n * i + j + 1;//自然配列を生成して2次元配列に収納する
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
//自然配列に体裁を整えて表示する。
if (2次元配列[i][j] < 10)cout << " ";
cout << 2次元配列[i][j]<<" ";
}
cout << endl;
}
cout << endl;
}
解説
const int n = 6;//これからは具体的な数字を使わずにnとする。左の6を8などに変更すれば8次魔方陣に対応する
注釈文に書いてある通り const int とは定数という意味です。
int 2次元配列[n][n];
n がint型ではエラーします。const int型(定数型)にしなければならないのです。
は大変重要です。
これからは具体的に数字にせずに n で表す習慣を身につけてください。
具体的な数字で9×9数独自動生成ソフトを作ってしまったために
一般化に苦労しました。
極めて大切なことです。
具体的な数字ではなく n で書く!
そうすれば一か所変更 n = 9 → n = 16 するだけで16×16数独自動生成ソフトに変身するのです。
くどいですが、大事なことですので繰り返します。
const int n = 6;//これからは具体的な数字を使わずにnとする。左の6を8などに変更すれば8次魔方陣に対応する
以外ではすべて n にしてください。
では次話への課題です。
対角線部分を交換して

(
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
36 2 3 4 5 31
7 29 9 10 26 12
13 14 22 21 17 18
19 20 16 15 23 24
25 11 27 28 8 30
6 32 33 34 35 1
)
を実現してください。
第6章第2話へ 第6章第4話へ
本講義トップへ