第13講 ベクタを利用して4次魔方陣を作ろう!
第10話 4次魔方陣作成プログラミングその2の解説
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
↓
1 | 15 | 14 | 4 |
12 | 6 | 7 | 9 |
8 | 10 | 11 | 5 |
13 | 3 | 2 | 16 |
をfor文で実現するプログラムの主要部分再掲
void g(vector<vector<int>>::iterator m){
int w;
for(int i=0;i<2;i++){
w=m[3][2-i];
m[3][2-i]=m[0][1+i];
m[0][1+i]=w;
}
for(int i=0;i<2;i++){
w=m[2-i][3];
m[2-i][3]=m[1+i][0];
m[1+i][0]=w;
}
}
今回も第8話のプログラム
void g(vector<vector<int>>::iterator m){
int w;
w=m[3][2];
m[3][2]=m[0][1];
m[0][1]=w;
w=m[3][1];
m[3][1]=m[0][2];
m[0][2]=w;
w=m[2][3];
m[2][3]=m[1][0];
m[1][0]=w;
w=m[1][3];
m[1][3]=m[2][0];
m[2][0]=w;
}
と対比させながら、トレースします。
前半部分
for(int i=0;i<2;i++){
w=m[3][2-i];
m[3][2-i]=m[0][1+i];
m[0][1+i]=w;
}
からトレースしましょう。
i=0のとき
w=m[3][2-i];
m[3][2-i]=m[0][1+i];
m[0][1+i]=w;
は
w=m[3][2-0];
m[3][2-0]=m[0][1+0];
m[0][1+0]=w;
すなわち、
w=m[3][2];
m[3][2]=m[0][1];
m[0][1]=w;
となりますから、第8話プログラムの
w=m[3][2];
m[3][2]=m[0][1];
m[0][1]=w;
ピンクと同じです。
for(int i=0;i<2;i++){
w=m[3][2-i];
m[3][2-i]=m[0][1+i];
m[0][1+i]=w;
}
i=1のとき
w=m[3][2-i];
m[3][2-i]=m[0][1+i];
m[0][1+i]=w;
は
w=m[3][2-1];
m[3][2-1]=m[0][1+1];
m[0][1+1]=w;
すなわち、
w=m[3][1];
m[3][1]=m[0][2];
m[0][2]=w;
となりますから、第8話プログラムの
w=m[3][1];
m[3][1]=m[0][2];
m[0][2]=w;
の青と同じです。
次ぎに、後半部分
for(int i=0;i<2;i++){
w=m[2-i][3];
m[2-i][3]=m[1+i][0];
m[1+i][0]=w;
}
をトレースしましょう。
i=0のとき
w=m[2-i][3];
m[2-i][3]=m[1+i][0];
m[1+i][0]=w;
は
w=m[2-0][3];
m[2-0][3]=m[1+0][0];
m[1+0][0]=w;
すなわち、
w=m[2][3];
m[2][3]=m[1][0];
m[1][0]=w;
となりますから、第8話プログラムの
w=m[2][3];
m[2][3]=m[1][0];
m[1][0]=w;
薄茶と同じです。
for(int i=0;i<2;i++){
w=m[2-i][3];
m[2-i][3]=m[1+i][0];
m[1+i][0]=w;
}
i=1のとき
w=m[2-i][3];
m[2-i][3]=m[1+i][0];
m[1+i][0]=w;
は
w=m[2-1][3];
m[2-1][3]=m[1+1][0];
m[1+1][0]=w;
すなわち、
w=m[1][3];
m[1][3]=m[2][0];
m[2][0]=w;
となりますから、第8話プログラムの
w=m[1][3];
m[1][3]=m[2][0];
m[2][0]=w;
の緑と同じです。
というわけで、
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
↓
1 | 15 | 14 | 4 |
12 | 6 | 7 | 9 |
8 | 10 | 11 | 5 |
13 | 3 | 2 | 16 |
が実現できるのです。
さて、第14講では6次魔方陣の作成に挑戦しましょう。
これもいきなりでは難しいですから、
段階を踏んで最後に
を実現することにしましょう。
最初は、
を実現するプログラムから考えましょう。
第9話へ 第14講第1話へ
eclipse c++ 入門講義第1部へ
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ