数独 - 基于行、列找到当前方格

7

enter image description here

根据上述图片中的坐标,我想计算所选单元格属于哪个以红色突出显示的“方格”。

我正在解决数独难题,并可以访问每个方格的宽度,以及单元格所在的行/列。

我无法计算单元格所属的“数字”方格(它们从左到右,从上到下开始为1,递增),因此上面方格的数字为:

1|2
3|4

我该如何计算这个呢?任何建议都将不胜感激。Java特定的方法或者算法都可以 :)


我认为知道每个正方形的宽度并不能确定网格中列的数量... - Chandu
也许我漏掉了什么,但是你怎么知道列数是4而不是8、16等等... - Chandu
这是作业,对吧(通常我们可以看出来,因为4-5个人几乎同时发布了相同的问题)。如果是,请将其标记为“作业”。 - Jim Garrison
如果你仔细看的话,它确实是这样的。每个正方形的宽度也表示每行将有多少个正方形,这意味着该宽度的正方形将等于每行单元格的数量。由于一切都是正方形,同样的计算也适用于列。 - ILoveToCode
1
@Jim:不,这不是作业,但如果我发一个作业问题,我一定会记住这个礼节的。谢谢 :) - ILoveToCode
显示剩余3条评论
3个回答

7
int numMajorRows = 2;
int numMajorCols = 2;  
int width = 2;

// assuming row and col also start at 1.  
int squareNumber(int row, int col) {
  int majorRow = (row-1) / width;  // zero based majorRow
  int majorCol = (col-1) / width;  // zero based majorCol
  return majorCol + majorRow * numMajorCols + 1;
}

1
int width = 2;
int nCols = Math.pow(width, 2);
int nRows = Math.pow(width, 2);

int cellRow = 2;
int cellCol = 2;

int squareRow = (cellRow - 1) / nRows;
int squareCol = (cellCol - 1) / nCols;

int squareNum = (squareRow * width) + squareCol + 1;

0
squareX = 1 + (cellX - 1) / cellsPerSquareX;
squareY = 1 + (cellY - 1) / cellsPerSquareY;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接