更优雅的数学解决方案(Switch)声明

时间:2014-06-25 18:30:55

标签: c++ switch-statement sudoku

我目前正在开发一个数独求解项目,通过各种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;
    }

我迫切希望获得更优雅的数学解决方案(公式/规则)或替换开关/案例陈述,以提高效率/减少体积。

有人有任何建议吗?

修改 我觉得我可能被误解了。请看下面的图片:

enter image description here

我正在尝试返回以绿色着色的单元格的X和Y,由它们对应的大灰色数字选择。

1 个答案:

答案 0 :(得分:6)

startX = (cubeNum % 3) * 3;
startY = (cubeNum / 3) * 3;

3可以替换为n,这里有n * n个板。

如果由于某种原因(cubeNum / 3)浮动,您必须向cubeNum申请支付。