0

非常によく似た投稿がたくさん見つかりましたが(コイン交換の問題を参照)、合計演算子のみを使用しています。ここで、足し算、引き算、掛け算、割り算ができると想像してみてください。すべての計算の組み合わせを特定の数にする方法はありますか?理想的にはJavaで

例:1 5 2 4 9が与えられた場合、16を取得しようとします

ソリューション:

  • 9 + 1 + 4 + 2 = 16
  • 2 * 9-(5-4 + 1)= 16
  • 5 *(4 + 1)-9 = 16
  • など(そのうちの20個を見つけました)。

ありがとう。

4

1 に答える 1

4

二項演算しかないため、最初の 2 つの例のように、葉が数値で他のすべてのノードが演算を表す二分木として計算をモデル化できます。

  +                  -
 / \                / \
9   +              *   +
   / \            /|  / \
  1   +          2 9 -   1
     / \            / \
    4   2          5   4

したがって、アルゴリズムには次の部分が必要になります。

  • 特定のノード数までの可能なすべてのバイナリ ツリーのツリー ジェネレーター: 数値ノードから始めて、各数値ノード (リーフ) をオペレーター ノードと 2 つの子ノード (数値ノード) で再帰的に置き換え、このような一連のツリーを生成します。

.

N   O       O       O       ...
   / \     / \     / \
  N   N   O   N   N   O
         / \         / \
        N   N       N   N
  • 特定の二分木 (上記のような) に対して、次のような操作と数値のすべての可能な挿入を生成する「ツリー フィラー」:

.

  O    :    +     +    ...  -  ...
 / \       / \   / \       / \
N   N     1   5 1   2     1   5
  • 結果を計算するツリー評価器

ハッピープログラミング!:-)

于 2012-12-16T16:57:57.867 に答える