第27講 数独(ナンプレ)自動生成
第10話 新しい番号付けとそれに対応する座標を設定するプログラムの解説その2
今話では
for(i=0;i<3;i++){
for(j=0;j<3;j++){
for(k=0;k<3;k++){
for(l=0;l<3;l++){
a[3*i+k][3*j+l]=9*(3*i+k)+3*j+l;
}
}
}
}
の動きをトレースしてみましょう。
i=0のとき
j=0のとき
k=0のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+0][3*0+0]=a[0][0]
9*(3*i+k)+3*j+l=9*(3*0+0)+3*0+0=0
から、a[0][0]=0
l=1のとき
a[3*i+k][3*j+l]=a[3*0+0][3*0+1]=a[0][1]
9*(3*i+k)+3*j+l=9*(3*0+0)+3*0+1=1
から、a[0][1]=1
l=2のとき
a[3*i+k][3*j+l]=a[3*0+0][3*0+2]=a[0][2]
9*(3*i+k)+3*j+l=9*(3*0+0)+3*0+2=2
から、a[0][2]=2
k=1のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+1][3*0+0]=a[1][0]
9*(3*i+k)+3*j+l=9*(3*0+1)+3*0+0=9
から、a[1][0]=9
l=1のとき
a[3*i+k][3*j+l]=a[3*0+1][3*0+1]=a[1][1]
9*(3*i+k)+3*j+l=9*(3*0+1)+3*0+1=10
から、a[1][1]=10
l=2のとき
a[3*i+k][3*j+l]=a[3*0+1][3*0+2]=a[1][2]
9*(3*i+k)+3*j+l=9*(3*0+1)+3*0+2=11
から、a[1][2]=11
k=2のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+2][3*0+0]=a[2][0]
9*(3*i+k)+3*j+l=9*(3*0+2)+3*0+0=18
から、a[2][0]=18
l=1のとき
a[3*i+k][3*j+l]=a[3*0+2][3*0+1]=a[2][1]
9*(3*i+k)+3*j+l=9*(3*0+2)+3*0+1=19
から、a[2][1]=19
l=2のとき
a[3*i+k][3*j+l]=a[3*0+2][3*0+2]=a[2][2]
9*(3*i+k)+3*j+l=9*(3*0+2)+3*0+2=20
から、a[2][2]=20
j=1のとき
k=0のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+0][3*1+0]=a[0][3]
9*(3*i+k)+3*j+l=9*(3*0+0)+3*1+0=3
から、a[0][3]=0
l=1のとき
a[3*i+k][3*j+l]=a[3*0+0][3*1+1]=a[0][4]
9*(3*i+k)+3*j+l=9*(3*0+0)+3*1+1=4
から、a[0][4]=4
l=2のとき
a[3*i+k][3*j+l]=a[3*0+0][3*1+2]=a[0][5]
9*(3*i+k)+3*j+l=9*(3*0+0)+3*1+2=5
から、a[0][5]=5
k=1のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+1][3*1+0]=a[1][3]
9*(3*i+k)+3*j+l=9*(3*0+1)+3*1+0=12
から、a[1][3]=12
l=1のとき
a[3*i+k][3*j+l]=a[3*0+1][3*1+1]=a[1][4]
9*(3*i+k)+3*j+l=9*(3*0+1)+3*1+1=13
から、a[1][4]=13
l=2のとき
a[3*i+k][3*j+l]=a[3*0+1][3*1+2]=a[1][5]
9*(3*i+k)+3*j+l=9*(3*0+1)+3*1+2=14
から、a[1][5]=14
k=2のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+2][3*1+0]=a[2][3]
9*(3*i+k)+3*j+l=9*(3*0+2)+3*1+0=21
から、a[2][3]=21
l=1のとき
a[3*i+k][3*j+l]=a[3*0+2][3*1+1]=a[2][4]
9*(3*i+k)+3*j+l=9*(3*0+2)+3*1+1=22
から、a[2][4]=22
l=2のとき
a[3*i+k][3*j+l]=a[3*0+2][3*1+2]=a[2][5]
9*(3*i+k)+3*j+l=9*(3*0+2)+3*1+2=23
から、a[2][5]=23
本話はここまで。