简单的暴力故障排除

Simple brute force troubleshoot

本文关键字:故障 排除 简单      更新时间:2023-10-16

我需要帮助修复对一组数字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. 在添加radd1时使用deduct[0][9]是错误的,对吧
  2. dash[0][control3]的比较是在一个周期内进行的,因此测试值始终取决于该周期的最后一次迭代。(在这种情况下,control2+1dash[0][8]。我想如果存在等式,你就必须打破循环
  3. control2+'1'指定给dash[0][empty],但稍后使用control+1。(不是一回事)
  4. 条件if (test==1)中的整个赋值和比较感觉不太对劲,但我们不能仅从包含的代码中确定它是否正确

有一种更好的方法可以找到尚未使用的数字。我们知道1+2+..+9 = 45的和,所以你只需要对出现的数字求和,减去45就可以得到缺失的数字。