2012-10-31 78 views
5

我有一個Card實例的數組。如何根據此標準找到所有可能的組合?

Card[] allCards; 

我應該得到這些卡所有可能的組合,在下列條件下:

  • 所有組合都必須有一個最低的3張牌。
  • 一個組合沒有卡片限制(所以如果總共有15張卡片,你知道可以有15張卡片組合,其他的13,10個卡片組合)。

對於大學目的,我不應該使用任何花哨的圖書館能夠更輕鬆地完成這項工作。

我已經完成了它對,當然,但考慮到沒有限制,我通常會做的算法不會工作。

這是相當多的,他們問這裏蟒蛇什麼:Find all possible combinations

任何想法?我不想要代碼或任何東西 - 我只是失去了算法/想法。

我的問題(更詳細)

我可以通過使兩個循環(一個在另一個內)配成對。我可以通過三個循環(一個在另一個之內)製作三胞胎。

但我不知道如何做到這一點的具體問題,因爲:

  • 如果什麼陣列有15張卡?我不能寫15個循環...
  • 然後當然我需要下到14,13,12個循環...(因爲所有的組合都不是每個15個元素,可以有14個,13,12個元素時使用這個15元素陣列)

我可以找到一些組合,但不是動態的。

+0

我建議你在擔心效率之前先獲取可用的東西(至少在輸入數組很小的情況下)。如果你可以生成所有的對,你能用它來生成所有的三元組嗎? –

+0

如果沒有代碼,不知道你在找什麼。您已經提到了您需要的內容:「所有組合的列表」,它反映了Google和Stack Overflow上的多個結果。有沒有一個特定的原因,爲什麼你的問題不能用這些解決? – Grambot

+1

「獲得這些卡的所有可能的組合」究竟意味着什麼?在你必須輸出結果,或簡單顯示一個計數?那裏有很大的不同。 –

回答

1

紙筆練習:從Java語法

讓我們往回走了一分鐘。以5張卡片爲例,說10美元的鑽石Ace。現在列出所有可能的配對。 (提示:其中有10個)

現在使用您的列表對,列出每個可能的三倍。

現在使用的三元組列表,列出4

現在每一個可能的組合,讓我們的代碼是:

因爲你不知道在編譯時的組合的最大長度,使用循環不會解決問題。另一方面,這個問題適用於遞歸。我們首先假設我們有一個函數Card[][] getCombinations(Card[] cards),它返回一組卡片數組。因此,如果我們致電

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

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

現在,爲了讓事情變得簡單,假設getCombinations()只返回對。你如何使用這些對創建所有可能的三元組?

+0

我...有點失落。 * getCombinations()*返回所有對的矩陣,好吧。但是,好吧,我還是不明白應該怎麼用: – Voldemort

+0

@Omega看到我編輯的答案,嘗試用鉛筆和紙製作其他例子,這應該讓你更好地理解解決這些問題的步驟問題 –

+0

得到它的工作,也許不是你想的那樣(因爲它像XD一樣慢) – Voldemort