NB: 我很乐意听取有关更好标题的建议……
想象一个存储为整数数组的 n
xn
正方形。
如何最有效地生成一个长度为 n
的整数数组,其中包含每个 sqrt(n)
xsqrt(n)
子方块中的整数,并且这些子方块不重叠?
这是数独游戏的一个特例(n=9
),如果我们想要在较小的方格中放置数字。
我能想到的唯一方法类似于:
int square[n][n], subsq[n], len;
int s = sqrt(n);
for(int j=0; j<n; j+=s){
for(int i=0; i<n; i+=s){
//square[i][j] is the top-left of each sub-square
len = 0;
for(int y=j; y<j+s; y++){
for(int x=i; x<i+s; x++){
subsq[len] = square[x][y];
len++;
}
}
}
}
但这似乎有些疯狂,如果您原谅我的双关语。
有没有更有效的建议?
subsq[i]
的二维坐标吗? - Niklas B.