Не могу понять, почему эта функция никогда не возвращает правильный результат - PullRequest
0 голосов
/ 10 декабря 2010

Предполагается, что нижеприведенная функция определяет, когда в этой карточной игре есть две повторяющиеся карты.

int duplicate (struct card hand[])
{
    int i = 0, j = 0, duplicate = 0;

    for (i = 0; i < 5; i++)
    {
        for (j = i + 1; j < 5; j++)
        {
            if (hand[i].suit == hand[j].suit && hand[i].face == hand[j].face)
            {
                duplicate++;
            }
        }
    }
    return duplicate;
}

Я не могу понять, почему, но когда ценность карт в рукеэто то же самое, что никогда не прибавляет к количеству дублирующих карточек.

Я убежден, что это должно быть что-то очевидное, но я этого не вижу.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Вы должны сообщить нам, что типы для suit и hand предназначены для struct card - это может повлиять на то, как они должны сравниваться (в частности, если они указатели).

Кроме того, вы должны сообщить нам, какие данные вы передаете, какой результат вы получаете и чего ожидаете. Например, если вы раздаете в руке 5 карт, две из которых одинаковы, мне кажется, что вы вернете 1 (что может быть тем, что вы ожидаете, но вы можете ожидать 2 - я не знаю). Это потому, что вы не учитываете карту, на которую указывает i. Опять же - нужно ли вам, зависит от того, какой результат вы хотите / нуждаетесь.

Но другой пример, который почти наверняка не тот, который вам нужен, это если вы раздаете в руке 5 карт, каждая из которых одинакова. Вы можете ожидать результата 5 (или, может быть, 4), но вы получите 10, потому что когда:

i == 0, you count the 4 dupes
i == 1, you count the next 3 cards as dupes again
i == 2, the next 2 get counted again,

etc...
0 голосов
/ 10 декабря 2010

Я не знаю ничего о вводе или определении карты , так как оператор == делает не то, что вы думаете для масти или лица . Те примитивы, которые можно сравнивать из коробки, или указатели / объекты, которые требуют особого внимания?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...