2

宿題があり、この種の問題のコードから始める方法がわかりません。

n個の要素で構成される整数配列があるとしましょう。

[A][B][C][D][E] (例として 5 つの要素があります)

すべての組み合わせ (ABCDE、ABCD、ABCE、ACDE、BCDE、ABC、ABD、ABE、ACE、ADE、BDE、CDE、AB、AC 、AD、AE、BC、BD、BE、CD、CE、DE、A、B、C、D、E)

別の例は、配列内の 4 つの要素 ([A][B][C][D]) です。

(ABCD、ABC、ABD、ACD、BCD、AB、AC、AD、BC、BD、CD、A、B、C、D)の組み合わせのすべての合計をリストしたい。

皆さんが私の質問を理解してくれることを願っています。ヘルプが必要なのですが、どうすればよいかわかりません。

4

3 に答える 3

2

さて、従うべき簡単なルールは次のとおりです。

"ABCDE" のすべての組み合わせのセットは、"A" を含む (つまり、A で始まる) 組み合わせと、"A" を含まない組み合わせで構成されます。どちらの場合も、「BCDE」のすべての組み合わせが発生する可能性があります。もちろん、「BCDE」の組み合わせも同様に扱うことができます。

于 2012-01-14T02:25:22.600 に答える
0

「可能性のすべての合計をリストアップする」とは、実際に可能な組み合わせ数を知りたいということですか?

その場合、一度に K 個取得した N 個のアイテムの組み合わせを検索します。このサイトには、この問題に対処するページがあります。次に、(5 倍) + (4 倍) + (3 倍) + (2 倍) + (1 倍) の組み合わせの数を単純に追加して、合計の「可能性の合計」を取得します。

それとも、値の配列があり、文字通り、要素のさまざまな組み合わせによって表されるさまざまな合計を出力したいということですか? その場合、実際にすべての組み合わせを列挙し、合計を評価する必要があります。

したがって、{ 1, 2, 3, 4, 5 } の配列が与えられた場合、これを "A"、"B"、"C"、"D"、"E" としてエンコードできます。タプルの例は次のとおりです。

  • ABCDE = 1+2+3+4+5
  • 阿部=1+2+5
  • 紀元前 = 2+3+5

など、エンコードされた列挙を使用して合計の加数を選択します。重複を許可するか禁止するか (つまり、"DE" が "ED" と異なるか) を決定すると、結果に非常に大きな影響が及ぶことに注意してください。ほとんどの場合、これはおそらくあなたが望むものではありません。

于 2012-01-14T03:45:06.133 に答える
0

3 つの要素がある場合、各要素が 1 から 3 (または 0 から 2) の特定の位置に配置され、要素が特定のセットに含まれているかどうかを表すブール配列を想像することができます。

ABC remark
--- ---------------------
000 no element in the set
001 one element, C
010 one element, b
100 ...
011 two elements, b and c
...
111 all elements contained

ここで、この場合は 2³ である解の数を計算し、たとえば 011 から (b, c) へのバイナリ表現からセットへのマッピングを行う関数を生成すると、簡単にプログラムできます。 0 から max-1 まで反復し、マッピング関数によって生成されたすべてのセットを返します。

于 2012-01-14T07:40:00.893 に答える