Я пишу программу для школьного проекта на C, которая сравнивает значения двух массивов и дает конкретные результаты в зависимости от того, что было от пользователя.В основном мои выходные значения - два: correctPosition и correctValue .
correctValue - это значение, которое находится, например, в valuesArray , но не в правильной позиции в inputArray ;значение "4" соответствует индексу 1 из valuesArray , но находится по индексу 2 из inputArray .
correctPosition - это значение, которое водин и тот же индекс в обоих valuesArray и inputArray .Например;значение «3» находится в индексе 1 из valuesArray и inputArray
Если значение x между двумя массивами совпадает, то это может быть правильное значение или правильное положение.Вот визуальное представление:
valuesArray: 2 3 3
------------------
inputArray: 1 2 3
Answer: correctPosition = 1, correctValue = 1.
inputArray: 2 1 3
Answer: correctPosition = 2, correctValue = 0.
inputArray: 2 3 3
Answer: correctPosition = 3, correctValue = 0.
Вот код, который я написал для этого:
#include <stdio.h>
int main() {
int inputArray[3], valuesArray[3];
int correctNumber = 0, positionMatch = 0;
int x, y;
int visitedMatch[3];
valuesArray[0] = 2;
valuesArray[1] = 3;
valuesArray[2] = 3;
inputArray[0] = 1;
inputArray[1] = 2;
inputArray[2] = 3;
for( x = 0; x < 3; x++) {
visitedMatch[x] = 0;
}
for(x = 0; x < 3; x++) {
for(y = 0; y < 3; y++) {
if (inputArray[x] == valuesArray[y] && visitedMatch[y] == 0) {
if (x == y) { positionMatch++; } else { correctNumber++; }
visitedMatch[y] = 1;
break;
}
}
}
printf("correctPosition = %d, ", positionMatch);
printf("correctValues = %d\n", correctNumber);
return 0;
}
Проблема в том, что для ввода 1 2 3 сначала требуется 1 и проверяетсяvaluesArray и ничего не может найти, поэтому результат остается равным 0. Затем во второй итерации, где x = 1, он берет 2 и проверяет, что он находится в массиве, но не имеет правильного индекса, поэтому счетчик correctValue становится равным 1. Теперь в последней итерации, гдеx = 2, он принимает 3 и проходит через цикл и находит ПЕРВОЕ значение «3» в индексе 2, потому что он никогда не посещался, поэтому конечный результат становится correctPosition = 0, correctValue = 2. Если я записываю вход как 23 3, тогда он работает нормально, и вывод будет корректным: положение = 3, правильное значение = 0. Как я могу это исправить, чего мне здесь не хватает?
Любая помощь будет очень признательна.