第14講 ベクタを利用して6次魔方陣を作ろう!
第8話 左右対称移動を考えるためのヒント

ヒントとして、
1 2 0
2 0 1

を実現するプログラム例を書いてみましょう。
#include<iostream>
using namespace std;
void main(){
   for(int i=0;i<3;i++)cout<<(i+1)%3<<" ";
   cout<<endl;
   for(int i=0;i<3;i++)cout<<(i+2)%3<<" ";
   cout<<endl;
}

ポイントは(i+1)%3等です。
a%bはaをbで割ったときの余りを求めるものです。
例えば、4%3=1です。
トレースしてみましょう。
まず、
   for(int i=0;i<3;i++)cout<<(i+1)%3<<" ";
から。
i=0のとき
               cout<<(0+1)%3<<" ";
すなわち、
               cout<<1%3<<" ";
すなわち、
               cout<<1<<" ";
ですから、最初1が表示されます。
i=1のとき
               cout<<(1+1)%3<<" ";
すなわち、
               cout<<2%3<<" ";
すなわち、
               cout<<2<<" ";
ですから、2番目に2が表示されます。
i=2のとき
               cout<<(2+1)%3<<" ";
すなわち、
               cout<<3%3<<" ";
すなわち、
               cout<<0<<" ";
ですから、3番目に0が表示されます。


次ぎに
   for(int i=0;i<3;i++)cout<<(i+2)%3<<" ";
について
i=0のとき
               cout<<(0+2)%3<<" ";
すなわち、
               cout<<2%3<<" ";
すなわち、
               cout<<2<<" ";
ですから、最初2が表示されます。
i=1のとき
               cout<<(1+2)%3<<" ";
すなわち、
               cout<<3%3<<" ";
すなわち、
               cout<<0<<" ";
ですから、2番目に0が表示されます。
i=2のとき
               cout<<(2+2)%3<<" ";
すなわち、
               cout<<4%3<<" ";
すなわち、
               cout<<1<<" ";
ですから、3番目に1が表示されます。

以上から
1 2 0
2 0 1

が実現しています。

 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

では、紺色のセルの左右交換を考えてください。




第7話へ
 第9話へ


a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ V
BA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ