下面的函数应该找出我正在开发的纸牌游戏中何时有两张重复的纸牌。
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;
}
我不明白为什么,但是当手牌中的牌的值(value)相同时,它永远不会增加重复牌的数量。
我确信这一定是显而易见的事情,但我没有看到它。
谢谢!
最佳答案
您应该让我们知道 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...
关于无法弄清楚为什么这个函数永远不会返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405694/