第14講 4次及び6次魔方陣の作成
第5話 対角線の交換プログラムの解説その2
Ⅱ 対角線の交換による魔方陣の完成
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 13 | 14 | 15 | 1 |
解答コード主要部分再掲
public static void g(int a[][]){
int i,w;
for(i=0;i<2;i++){
w=a[i][i];
a[i][i]=a[3-i][3-i];
a[3-i][3-i]=w;
}
for(i=0;i<2;i++){
w=a[i][3-i];
a[i][3-i]=a[3-i][i];
a[3-i][i]=w;
}
}
解説
本話は
for(i=0;i<2;i++){
w=a[i][3-i];
a[i][3-i]=a[3-i][i];
a[3-i][i]=w;
}
の部分のトレースです。
i=0のとき、
w=a[i][3-i];
は
w=a[0][3-0]=a[0][3];
ですから、座標(0,3)の値4が、
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 13 | 14 | 15 | 1 |
一時収納のボックスwに代入されます。
次の行
a[i][3-i]=a[3-i][i];
は
a[0][3-0]=a[3-0][0];
すなわち
a[0][3]=a[3][0];
で
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 4 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 13 | 14 | 15 | 1 |
座標(3,0)の値13が座標(0,3)に代入されて、
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 13 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 13 | 14 | 15 | 1 |
となります。
3行目
a[3-i][i]=w;
は
a[3-0][0]=a[3][0]=w;
で一時収納ボックスwの値4が座標(3,0)に代入され、
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 13 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 4 | 14 | 15 | 1 |
座標(0,3)と座標(3,0)の交換ができました。
i=1のとき、
w=a[i][3-i];
は
w=a[1][3-1]=a[1][2];
ですから、座標(1,2)の値
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 13 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 4 | 14 | 15 | 1 |
7が1次収納ボックスwに
に納められます。
2行目
a[i][3-i]=a[3-i][i];
は
a[1][3-1]=a[3-1][1];
すなわち
a[1][2]=a[2][1];
で座標(2,1)
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 13 |
1 | 5 | 11 | 7 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 4 | 14 | 15 | 1 |
の値10が座標(1,2)に代入されて
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 13 |
1 | 5 | 11 | 10 | 8 |
2 | 9 | 10 | 2 | 12 |
3 | 4 | 14 | 15 | 1 |
となります。
最後の行
a[3-i][i]=w;
は
a[3-1][1]=a[2][1]=w;
ですから、1次収納ボックスwの値7が座標(2,1)が代入され、
0 | 1 | 2 | 3 | |
0 | 16 | 2 | 3 | 13 |
1 | 5 | 11 | 10 | 8 |
2 | 9 | 7 | 2 | 12 |
3 | 4 | 14 | 15 | 1 |
座標(1,2)と座標(2,1)の交換が成功できて、晴れて4次魔方陣の完成です。
さて、次は
Ⅲ 6次自然配列の生成
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 |
への挑戦です。
第4話へ 第6話へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第2部
初心者のための
VC++による C言語 入門 C++ 入門 基礎から応用まで第3部