2011-12-27 8 views
1

要約:3つの数字の間で可能なすべての操作を行う

私は3つの数字のセットを持っています。(a、b、c)私は、これらの数値の間のすべての算術演算(+、 - 。*、/)を実行し、結果の値を取得したいと思います。

私の考えはサブセットを生成することです。今

1] [(A、B)、C]は

2] [(C)、B]

3] [(C、B)、A]

セット[(a、b)、c]の中で、 "a"と "b"の間のすべての演算を行い、それらを "r1"、 "r2"、 "r3"などとして保存します。完了したら、 "r1"、 "r2" ...と "c"の間のすべての操作を実行して最終結果値を取得します。

これは私の目標を達成するのに最適な方法ですか?

EDIT-1:例として

、私は、私は、次の

1 + 2 + 3 = 6

1を行いたい番号(1,2,3)を有する場合+ 2-3 = 0

1-2-3

1 * 2 * 3 = 6

など。

基本的には、数値セット間のすべての可能な算術演算です。

+0

明確にしてください。正確な値は何ですか? a = 5、b = 5、c = 3とします。「a + b + c」、「a + c + b」、「b + a + c」、「b + c + a」などそれらのサブセットのみ? – thiton

+0

@thiton、私は質問を明確にした、メインの投稿のEDIT-1を参照してください。 – bhavesh

+0

あなたはいくつかのことの1つを求めているかもしれません:(1)数学的に同等であるかどうかに関わらず、 (2)与えられた入力値a、b、およびcに対して同じ答えを生成したとしても、数学的に異なる演算を表すすべての式。 (3)与えられた入力に対して異なる値を生成する一連の式。どちらですか? –

答えて

1

短い答えは単純にNOです。最適ではありません。たとえば、(a + b)+ cと(a + c)+ bを計算しますが、両方とも同じ値を持ちます。

+0

私はdownvoteの理由を知ってうれしいです。 –

+0

@Seed Amiri、私はあなたの答えをdownvoteしなかった、私はただそれをupvoted :)。質問 - >これを達成する最適な方法は何でしょうか? – bhavesh

+0

@bhavesh、可能な異なる有効なステートメントの数が48よりも小さいので、コード内ですべてを試すことができます(効率的ですがプログラミング上の問題ではありません)が、これは単なる短期間の回答です。私はあなたの問題について考えるでしょうし、もし私が優雅なやりかたをしたら、私はそれを書きます。また、あなたの質問を言い換える方がいいです、私がこの答えを書いた理由の1つは、質問をはっきりと思い出させるためです。 –

0

あなたのアプローチは基本的には健全ですが、不完全です。最初に、通常の算術規則の下では、([(a + b)* c]のようなグループ化を表すために)出力にかっこを含めるか、操作の組み合わせが存在しないことを受け入れる必要がありますあなたの最終的な出力。

また、「1 *(2 + 3)」などの算術演算の組み合わせを生成することもできません。 (これは "1 *(2 + 3)"を "(2 + 3)* 1"と区別したいと思っていると仮定しています。形式[a、(b、c)]のグループ化。この2番目のグループ分けを含めると、可能なすべての式の解析木を生成することになります。しかし、冗長なカッコを削除すると、「1+(2 + 3)」と「(1 + 2)+3」は同じです。

a、b、cの2つ(または3つすべて)が等しいことを許可すると、別の問題もあります。 (例えば、(a、b、c)=(1,3,3)の場合、[1 + 3 + 3]は[(a + b)+ c]と[(a + c)+ b]に対して1回です。[a、(b、c)]のようなグループ化を許可すると、不要なかっこは削除され、合計4回表示されます。あなたは、B間の平等、および/またはcを可能にし、まだ重複の出力を回避したい場合)、あなたはいくつかの段階で重複を排除する必要があります。

  • 重複のすべての出力とテストを生成する(簡単なことで
  • すべてのパーズツリーを生成し、その中の重複をテストします(最初の出力とあまり違いはありませんが、最終出力を生成する作業を避けます)。
  • 開始前にサブセットのコレクションを整理します。演算子を挿入するプロセス(おそらく最高)
  • より複雑なサブセットの生成を避ける

最後に(私は思うが)、グループの2番目のセットを許可し、a、b、およびcの間で複製を許可する場合は、世代のスキーム(私は私の頭の上から考えることはできません) cでは、評価できない "1 /(3 - 3)"のような表現があります。 (入力にゼロを含めることを許可しない限り、これはグループ化[(a、b)、c]で始まるとは思わない)あなたがそれらについて何をしたいかを決める必要があるだろう。

関連する問題