简单的蛮力故障排除

时间:2012-01-11 22:43:00

标签: c++ brute-force

我需要帮助修复一组数字1 = 9的非常简单的暴力攻击。我的目标是解决一个sudoko板,其中一行填充8个数字,这样行上只剩下一个数字。 我想到的唯一方法就是为丢失的单元格分配一个数字,然后检查该行上的其他每个数字。我真的很接近解决方案,但返回始终是1.这是我遇到问题的代码片段:我更新了代码,以便它现在添加所有数字并从45减去它们找到合适的号码。它仍然没有返回正确的数字。它返回423(丢失数字为6)。

int radd1=deduct[0][0]+deduct[0][1]+deduct[0][2]+deduct[0][3]+deduct[0][4]+deduct[0] int test=0;
if (radd1==8) {
    for (int control=0; control<9; control++) {
        if (dash[0][control]=='_') {
            empty=control;
        }
    }
    for (int control2=0; control2<9; control2++) {
        if (control2!=empty) {
            test=test+dash[0][control2];
        }
    }
    cout << test << endl;
}

更多信息:
整个解决方案是基于一个9x9字符填充数字,以适当的位置。这个字符称为dash[9][9] deduct[9][9]字符是dash[9][9]的副本,但不是实际的数字,而是1。这样我就可以累加一整行,如果它等于8,则执行我的简单蛮力(如果这是正确的术语)来找到最后的第九个数字。 empty是一个int。它存储(在这种情况下)没有编号的列号 发现任何问题?

1 个答案:

答案 0 :(得分:0)

  1. 在添加radd1时使用deduct[0][9]是错误的,对吧?
  2. dash[0][control3]的比较在一个循环内,因此test的值总是依赖于循环的最后一次迭代。 (在这种情况下control2+1 vs dash[0][8]。我认为如果存在平等,你必须打破这个循环。
  3. 您将control2+'1'分配给dash[0][empty],但稍后使用control+1。 (不一样)
  4. 条件if (test==1)内的整个分配和比较感觉不对,但我们无法确定它是否正确,只是来自所包含的代码。
  5. 有一种更好的方法可以找到尚未使用的数字。我们知道1+2+..+9 = 45的总和,因此您只需将出现的数字相加并从45减去以获得缺少的数字。