第2講 再帰的呼び出しで魔方陣を作ろう!
第2話 1次元を2次元に対応させるには?
n = 3 のとき
0 | 1 | 2 | |
0 | 0 | 1 | 2 |
1 | 3 | 4 | 5 |
2 | 6 | 7 | 8 |
n = 4 のとき
0 | 1 | 2 | 3 | |
0 | 0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 | 7 |
2 | 8 | 9 | 10 | 11 |
3 | 12 | 13 | 14 | 15 |
1次元であるgと2次元添え字(i,j)を対応させるにはどうしたよいでしょうか。
これからもよく使うテクニックですが商とあまりを使えば、
簡単に関連づけられます。
n = 3でもn = 4でも、あるいはい一般に
iはgをnで割ったときの余り、
jはgをnで割ったときの商になっています。
例えば、n = 4のときのgの9をnである4で割ったとき、
余りは1、商は2で見事に対応しています。
よって、プログラムソースは
i = g mod n
j = int( g / n )
とすればよいのです。
g mod nはgをnで割ったときの余りを求める式です。
g / nは小数になりますが、intによって小数部分を切り捨てれば商となります。
intは小数部分を切り捨てて整数にするものです。
だから、例えば
int ( 3.141564 ) = 3
となります。