Простое грубое устранение неполадок - PullRequest
0 голосов
/ 12 января 2012

Мне нужна помощь, чтобы исправить очень простую атаку грубой силой на набор чисел 1 = 9. Моя цель состоит в том, чтобы решить доску судоко, где строка заполнена 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 является инт. Он хранит (в данном случае) номер столбца, который не имеет номера.
Найдите какие-нибудь проблемы?

1 Ответ

0 голосов
/ 12 января 2012
  1. Ошибочно использовать deduct[0][9] при добавлении radd1, верно?
  2. Сравнение с dash[0][control3] выполняется внутри цикла, так что значение теста всегда зависит отПоследняя итерация цикла.(В этом случае control2+1 против dash[0][8]. Я полагаю, вам придется разорвать цикл, если есть равенство.
  3. Вы присваиваете control2+'1' dash[0][empty], но позже используете control+1.(Не одно и то же)
  4. Все назначение и сравнение внутри условия if (test==1) не кажутся правильными, но мы не можем быть уверены, что это правильно только из включенного кода.

Существует лучший способ найти число, которое не было использовано. Мы знаем сумму 1+2+..+9 = 45, поэтому вам нужно только сложить появляющиеся числа и вычесть из 45, чтобы получить пропущенное число.

...