我目前正在开发一个数独求解项目,通过各种C ++技能从初学者到更高级(一步一步)的工作方式
我目前需要某种公式/解决方案来计算第一个"细胞的X和Y坐标。在数独的9x9网格中找到的3x3网格中。
如果数独网格的3x3部分编号如下:
| 0 | 1 | 2 |
| 3 | 4 | 5 |
| 6 | 7 | 8 |
目前我能想到的最好的是一个开关/案例声明:
switch(cubeNum) {
case 0:
case 1:
case 2:
startY = 0;
break;
case 3:
case 4:
case 5:
startY = 3;
break;
case 6:
case 7:
case 8:
startY = 6;
break;
}
switch(cubeNum) {
case 0:
case 3:
case 6:
startX = 0;
break;
case 1:
case 4:
case 7:
startX = 3;
break;
case 2:
case 5:
case 8:
startX = 6;
break;
}
我迫切希望获得更优雅的数学解决方案(公式/规则)或替换开关/案例陈述,以提高效率/减少体积。
有人有任何建议吗?
修改 我觉得我可能被误解了。请看下面的图片:
我正在尝试返回以绿色着色的单元格的X和Y,由它们对应的大灰色数字选择。
答案 0 :(得分:6)
startX = (cubeNum % 3) * 3;
startY = (cubeNum / 3) * 3;
3
可以替换为n
,这里有n * n个板。
如果由于某种原因(cubeNum / 3)
浮动,您必须向cubeNum
申请支付。