Анализ двух массивов для игры mastermind для новичков
Я знаю, что к игре «Вдохновитель» возникает много вопросов, но я все еще не нашел нужной помощи. Мое основное значение по умолчанию - это логика анализа. Что востребовано. Алгоритм обработки в функции анализа - это главный интерес упражнения. Мне нужно сравнить предложение игрока под названием «essai []» и «ref[]». «Ref []» - это 4-значное число, созданное случайной функцией. Одно число, посчитанное как «точно в нужном месте», не может считаться «правильным числом в неправильном месте». Пример: ref[] = {1, 2, 3, 4} и essai [] = {1, 5, 7, 3}. Он будет считаться как 1 число в «точно правильном месте» и 0 чисел в «неправильном месте». Не может быть пересчитан более одного раза. То же самое и в другом случае. Я начал с правильного места, если есть, то заменяю оба числа, в "essai[] »и« ref[] »с -1. Я сделал то же самое для« правильного числа в неправильном месте ».
Вот мой код:
void analyse(int ref[], int essai[]) {
int i, j, o, RefTmp[4], NbPos, NbChif;
for(i = 0; i < 4; i++){
RefTmp[i] = ref[i];
}
for (j = 0; j < 4; j++) { // [1] = 5 : [1] = 2
for (o = 0; o < 4; o++) {
if (RefTmp[j] == essai[o]) {
if (j == o) {
++NbPos;
RefTmp[j] = essai[o] = -1;
printf("One number in the right place\n");
break;
}
else {
++NbChif;
RefTmp[j] = essai[o] = -1;
printf("One number in the wrong place\n");
break;
}
}
}
}
}
Я понимаю, что мне нужно создать 2 цикла for для сравнения обоих массивов, но когда несколько «правильных чисел ошибаются» (например), цикл также печатается несколько раз. Он должен печататься только один раз. Я сделал «RefTmp[]», чтобы настоящий «ref[]» не был уничтожен в процессе.
Я застрял на несколько недель и в отчаянии.
Любой совет??
1 ответ
Вы должны найти и «стереть» все экземпляры «правильного номера в правильном месте» (для чего нужен только один цикл), прежде чем даже рассматривать возможность обработки экземпляров «правильного номера в неправильном месте».