Я работаю над домашним заданием для Comp Sci I и попробовал буквально все, что смог найти в Интернете и в своем учебнике, пытаясь подсчитать количество подходящих элементов в двух массивах C ++. Я просто не могу найти способ заставить мой код считать количество подходящих элементов в двух массивах одинакового размера (одно и то же значение, одна и та же позиция). Например, если array1 имеет 5, 4, 3, 2, 1, а array2 имеет 1, 2, 3, 4, 5, есть один соответствующий элемент, 3. Как я могу получить свой код для выполнения этой, казалось бы, простой задачи ?
Не могу найти ответ нигде. Мой учебник показывает только, как увидеть, совпадают ли массивы точно, не считая количества совпадений, и я не смог найти никого другого с таким точным вопросом для C ++.
Вот моя функция до сих пор:
int matchCounter(int lottery[5], int user[5], int matches, int SIZE)
{
int count = 0;
for (count < SIZE; count++;)
{
if (lottery[count] == user[count])
{
matches++;
}
}
return matches;
} // end matchCounter
SIZE — это, кстати, константа, равная 5. Казалось бы, это должно работать, но каждый раз, когда я запускаю программу, она отображает 0 совпадений, даже если есть некоторые совпадения. Если бы кто-нибудь мог мне помочь, я был бы навсегда в вашем долгу. Серьезно, должна быть какая-то невероятно простая вещь, которую я просто не вижу. Спасибо за помощь заранее.
Ваш for
утверждение искажено. Попробуй это:
int matchCounter(int lottery[5], int user[5], int matches, int SIZE)
{
for (int count = 0; count < SIZE; count++)
{
...
По причине, почему ваша программа всегда терпит неудачу: count++
ставится в положение условия в for
цикл, так что каждый раз, когда это for
цикл выполнен, count
оценивается и считается условием, а затем count
увеличивается на 1. Однако каждый раз count
начинается с 0 (как в int count = 0;
), Итак for
цикл фактически никогда не выполняется, и matches
остаться нулевым.
РЕДАКТИРОВАТЬ:
Исходя из исходного кода, вы не используете возвращаемое значение, которое также предлагает @jimhark. Измените подпись функции на:
int matchCounter(int lottery[5], int user[5], int SIZE)
И позвоните с:
matches = matchCounter(lottery, user, 5);
В противном случае ваше возвращаемое значение функции matchCounter
игнорируется, а int matches
играет роль только локальной переменной в функции.
Прочитайте это о том, почему matches
не работает: http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html (в аналогичной обстановке)
Поскольку это домашнее задание, я постараюсь указать на ошибки, не давая решения.
Форма цикла for:
for (INIT; COND; STEP) {
BODY;
}
что эквивалентно:
INIT;
while (COND) {
BODY;
STEP;
}
То, как вы это сделали, ваш INIT count < SIZE
, который ничего не делает. Ваш «КОНД» count++
, который возвращает 0 на первой итерации. Как вы, возможно, знаете, 0 является ложным в контексте логического значения. Следовательно, ваше тело цикла for не выполняется вообще.
Кроме того, вы не должны проходить matches
в качестве аргумента. Это должна быть локальная переменная, инициализированная 0.
Возможно, вы не используете возвращаемое значение. Изменить сиг на:
int matchCounter(int lottery[5], int user[5], int SIZE)
{
matches = 0;
И убедитесь, что вы звоните с:
matches = matchCounter(lottery, user, 5);
Если вам нужна текущая сумма, используйте:
matches += matchCounter(lottery, user, 5);
В любом случае matchCounter не волнует, что такое промежуточный итог, так зачем передавать его?
Также вам может понадобиться сначала отсортировать списки.
Может быть, это может помочь:
int matches=0;
for(int i=0;i<ARRAY.SIZE;i++) {
for(int j=0;j<ARRAY.SIZE;j++) {
if(arr1[i]==arr2[j]) {
matches++;
arr2[j]=NULL;
}
}
}