我需要帮助修复一组数字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。它存储(在这种情况下)没有编号的列号
发现任何问题?
答案 0 :(得分:0)
deduct[0][9]
是错误的,对吧?dash[0][control3]
的比较在一个循环内,因此test的值总是依赖于循环的最后一次迭代。 (在这种情况下control2+1
vs dash[0][8]
。我认为如果存在平等,你必须打破这个循环。control2+'1'
分配给dash[0][empty]
,但稍后使用control+1
。 (不一样)if (test==1)
内的整个分配和比较感觉不对,但我们无法确定它是否正确,只是来自所包含的代码。有一种更好的方法可以找到尚未使用的数字。我们知道1+2+..+9 = 45
的总和,因此您只需将出现的数字相加并从45减去以获得缺少的数字。