5

我有一个Card实例数组。

Card[] allCards;

在以下条件下,我应该获得这些卡的所有可能组合:

  • 所有组合必须至少有 3 张牌。
  • 组合没有牌限制(所以如果总共有 15 张牌,你知道可以有 15 张牌的组合,其他 13、10 等)。

出于大学目的,我不应该使用任何能够更轻松地完成这项工作的精美库。

当然,我已经配对完成了,但考虑到没有限制,我通常会使用的算法不起作用。

这几乎就是他们对 python 的要求:查找所有可能的组合

有任何想法吗?我不想要代码或任何东西——我只是迷失了算法/想法。

我的问题(更详细)

我可以通过制作两个循环(一个在另一个循环中)来配对。我可以通过三个循环(一个在另一个循环中)来制作三胞胎。

但我不知道如何解决这个特定问题,因为:

  • 如果阵列有 15 张卡怎么办?我不能写15个循环......
  • 然后当然我需要下降到 14、13、12 个循环......(因为所有组合都不是每个 15 个元素,所以在使用这 15 个元素时可以有 14、13、12 个元素的组合-大批)

我可以找到一些组合,但不是动态的。

4

1 回答 1

1

纸笔练习:

让我们暂时离开 Java 语法。以 5 张牌为例,比如 Ace 到 10 的方块。现在列出所有可能的配对。(提示:有 10 个)

现在使用你的配对列表,列出每一个可能的三元组。

现在使用三元组列表,列出 4 的所有可能组合。

现在让我们编写代码:

由于您在编译时不知道组合的最大长度,因此使用循环不会解决问题。另一方面,这个问题适合递归。让我们首先假设我们有一个Card[][] getCombinations(Card[] cards)返回卡片数组数组的函数。所以如果我们打电话

Card[] cards = new Card[15];
// initialize individual Card objects
Card[][] combinations = getCombinations(cards);

combinations[i]包含生成的组合之一。

现在,为了简单起见,假设getCombinations()只返回对。你如何使用这些对来创建所有可能的三元组?

于 2012-10-31T21:45:09.417 回答