【发布时间】:2012-01-12 10:26:15
【问题描述】:
我需要帮助修复对一组数字 1=9 的非常简单的蛮力攻击。我的目标是解决一个 sudoko 板,其中一行充满 8 个数字,这样一行就只能剩下一个数字。 我想到的唯一方法是为丢失的单元格分配一个数字,然后将其与行中的所有其他数字进行检查。我真的很接近解决方案,但返回始终是 1。这是我遇到问题的代码的 sn-p: 我更新了代码,现在它添加所有数字并减去它们从 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 是一个整数。它存储(在这种情况下)没有编号的列号。
发现任何问题?
【问题讨论】:
-
如果
deduct是 9×9,你有一个错误,你访问deduct[0][9],很可能会读取deduct[1][0]。 -
@DanielFischer 实际上没有。
FOR循环在 0 开始并运行一次,在 8 结束,因为我指定了control<9 -
您必须考虑到您在数组中使用了字符,这些字符可以用作整数,但 '0' 的字符与数字 0 不同。要恢复整数值你必须使用
dash[0][control2]-'0'。 -
@Redmastif
radd1的计算原来使用了deduct[0][9]。我指的是那个。 -
@madth3 我实际上将
char dash[9][9]更改为int dash[9][9]以解决我遇到的另一个问题。
标签: c++ brute-force