5

インスタンスの配列がありCardます。

Card[] allCards;

次の条件で、これらのカードの可能なすべての組み合わせを取得することになっています。

  • すべての組み合わせには、最低3枚のカードが必要です。
  • 組み合わせにはカードの制限はありません(したがって、合計15枚のカードがある場合、15枚のカードの組み合わせ、13枚、10枚のカードなどの組み合わせが可能であることがわかります)。

大学の目的のために、私はこの仕事をより簡単に行うことができるどんな豪華な図書館も使うことになっていない。

確かにペアでやったのですが、制限がないことを考えると、普段やっているアルゴリズムはうまくいきません。

それは彼らがここでPythonに求めるものとほぼ同じです:すべての可能な組み合わせを見つけてください

何か案は?コードなどは必要ありません。アルゴリズム/アイデアに迷いました。

私の問題(より詳細)

2つのループ(一方は他方のループ内)を作成することでペアを作成できます。私は3つのループ(1つは別のループ内にある)を持つことでトリプレットを作成できます。

しかし、私はこの特定の問題を行う方法がわかりません。理由は次のとおりです。

  • アレイに15枚のカードがある場合はどうなりますか?15ループを書くことができません...
  • そしてもちろん、14、13、12ループに下げる必要があります...(すべての組み合わせがそれぞれ15要素ではないため、この15要素で作業する場合は14、13、12要素の組み合わせが存在する可能性があります-配列)

いくつかの組み合わせを見つけることができますが、動的ではありません。

4

1 に答える 1

1

紙と鉛筆の練習:

少しの間、Java構文から離れましょう。5枚のカードの例を見てみましょう。たとえば、エースからダイヤの10枚までです。次に、考えられるすべてのペアをリストします。(ヒント:10個あります)

ペアのリストを使用して、考えられるすべてのトリプルをリストします。

トリプルのリストを使用して、4の可能なすべての組み合わせをリストします。

それをコーディングしましょう:

コンパイル時の組み合わせの最大長がわからないため、ループを使用しても問題は解決しません。一方、この問題は再帰に役立ちます。Card[][] getCombinations(Card[] cards)カードの配列の配列を返す関数があると仮定することから始めましょう。だから私たちが呼ぶなら

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

combinations[i]生成された組み合わせの1つが含まれます。

さて、物事を簡単にするために、getCombinations()ペアのみを返すとしましょう。これらのペアを使用して、可能なすべてのトリプルを作成するにはどうすればよいですか?

于 2012-10-31T21:45:09.417 に答える