2012-01-11 3 views
0

Мне нужна помощь в установке очень простой атаки грубой силы на набор чисел 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

Если 'deduct' составляет 9 × 9, у вас есть ошибка, вы получаете доступ к' deduct [0] [9] ', что очень вероятно будет читать' deduct [1] [0] '. –

+0

@ DanielFischer Фактически нет. Цикл 'FOR' запускается и проходит один раз в 0 и заканчивается на 8, потому что я указал' control <9' –

+0

. Вы должны учитывать, что используете символы в массиве, и их можно использовать как целые числа, но char для '0' не совпадает с номером 0. Чтобы восстановить целые значения, вам нужно использовать 'dash [0] [control2] - '0''. – madth3

ответ

0
  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, чтобы получить номер, который равен m Иссингом.

Смежные вопросы