Подсчитать количество подходящих элементов в двух массивах Stack Overflow

Я работаю над домашним заданием для 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 совпадений, даже если есть некоторые совпадения. Если бы кто-нибудь мог мне помочь, я был бы навсегда в вашем долгу. Серьезно, должна быть какая-то невероятно простая вещь, которую я просто не вижу. Спасибо за помощь заранее.

3

Решение

Ваш 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 (в аналогичной обстановке)

3

Другие решения

Поскольку это домашнее задание, я постараюсь указать на ошибки, не давая решения.

Форма цикла for:

for (INIT; COND; STEP) {
BODY;
}

что эквивалентно:

INIT;
while (COND) {
BODY;
STEP;
}

То, как вы это сделали, ваш INIT count < SIZE, который ничего не делает. Ваш «КОНД» count++, который возвращает 0 на первой итерации. Как вы, возможно, знаете, 0 является ложным в контексте логического значения. Следовательно, ваше тело цикла for не выполняется вообще.

Кроме того, вы не должны проходить matches в качестве аргумента. Это должна быть локальная переменная, инициализированная 0.

1

Возможно, вы не используете возвращаемое значение. Изменить сиг на:

int matchCounter(int lottery[5], int user[5], int SIZE)
{
matches = 0;

И убедитесь, что вы звоните с:

matches = matchCounter(lottery, user, 5);

Если вам нужна текущая сумма, используйте:

matches += matchCounter(lottery, user, 5);

В любом случае matchCounter не волнует, что такое промежуточный итог, так зачем передавать его?

Также вам может понадобиться сначала отсортировать списки.

1

Может быть, это может помочь:

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;
}
}
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector