C:检查数组等价性的更有效方法?

标签 c

我的函数可以正常工作,但我想看看是否有更有效的方法来检查我手中的牌是否有三张,这样我就不需要那么多嵌套循环了。我不确定是否有。我正在为卡片组中的卡片使用枚举和结构。

最佳答案

有多种方法可以做到这一点。最好的方法取决于数组中的条目类型?

卡片总数有限制吗?我的意思是,这是数组中可以有界的最大值吗? (因为它们是卡片,我猜它们可以从 1 到 13)。 那么最好的选择是制作另一个大小为 13 的数组 counter 并将其初始化为 0。它们遍历所有元素,然后递增你看到的卡片的 counter .在任何时候,如果计数器 == 3 返回 true,否则最后返回 false。

实现将是

int counter[13] = {0};
for ( i = 0; i < 5; i++ ){
    card = hands[i].cardRank;
    counter[card]++;
    if (counter[card] == 3)
        return true;
return false;

如果卡片的值没有限制,你可以用类似的方式使用 hashmap。

如果 HashMap 数据结构不可用,您将不得不使用其他方法。

在这里,您将首先对数组进行排序。因此,如果出现 3 次,它们将聚集在一起。在一个循环中,您可以检查它们。对于每个元素,检查下一个元素和下一个元素的下一个元素是否与它相同。如果是,则返回 true。

否则最终返回false。 我认为该代码很容易实现。

如果你想不通,我可以发帖。

关于C:检查数组等价性的更有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42687532/

相关文章:

php - 如何在 PHP 中将数字分配到预定义的数字集中

c++ - 以下方式调用函数有什么区别?

c - 这段代码是否会导致内存泄漏

c - 如何将四个 16 位 uint 编码为 64 位 uint,然后再次解码它们?

c - 加法练习程序中的错误

用指针初始化 C 结构

c - 如何在远程进程的虚拟地址上设置断点?

c - 在 C 中迭代字符串 block 以构建新字符串的模式?

c - 使用 C 解析 JSON

c - 发生故障时释放所有分配的内存