2

数学とプログラミングの問題がありました。

与えられた文字のセット{1,2,3,4,5,6,7,8,9,+,-,*,/}. 次に、一連の文字を使用して、配列内の文字をランダムに生成10(または と言います) します。その後、この文字配列と 1 文字「=」を使用して、方程式の可能性をすべて見つける必要があります。N[1,+,1,∗,3,5,7,8,1]

したがって、この場合、次 の [1,+,1,∗,3,5,7,8,1]式のように1*1=1なります。3+5=87+1=815=8+715+3=18

複数桁の操作を形成できます。15+3=18

私の質問は、プログラムを使用してすべての方程式を生成しようとしているということです。どのような種類のアルゴリズムがそうできるか、いくつかのアイデアを教えていただけますか? または任意の方法でそれを行いますか?

私の現在のアプローチ:

私のアプローチは十分に速くありません。つまり、最小の方程式には3つの数値と1つの演算子が必要です。と

  1. 生成された配列から 4 つのメンバーをランダムに選択することから始めます。これらの 4 つのメンバーに 1 つのオペレーターがいる場合、
  2. 次に、「=」を追加します
  3. 可能なすべての注文を形成します。たとえば 1,1,2,+ 、 i は 112+= 、 121+= 、 1=12+ .... すべてをループします。と
  4. 次に、メンバーを5人に増やしてループします...
  5. 生成された配列の長さまでそれを行います
4

2 に答える 2

0

1つのアルゴリズムの上に設定された例を使用したソリューションの生のハックとして、選択した数値、演算子、および=のすべての組み合わせを簡単に見つけて、たとえばテストします

  • すべてのバリエーションで、すべての 9 に = (10 文字) を加えたもの。10×9×8×7×6×5×4×3×2×1 = 10! = 3,628,800バリエーションの数です。
  • 次に、すべてのバリエーションで 8 に = (9 文字) を加えます。 10×9×8×7×6×5×4×3×2 = 10!÷1!.
  • 次に、すべてのバリエーションで 7 に = (8 文字) を加えます。 10×9×8×7×6×5×4×3 = 10!÷2!.
  • など、すべてのバリエーションで 4 プラス = (3 つの数字と 2 つの演算子 = 5 文字) まで。 10×9×8×7×6 = 10!÷5!.

この式は、(n+1)!÷0! + (n+1)!÷1! + ... + (n+1)!÷(n-4)!

  • は、生成された数値nと演算子の数から = を引いたものです。

あなたの例では、9,858,240 の潜在的な方程式があります。= が末尾にある、= と演算子が一緒にあるなどの無効な方程式があることに注意してください。したがって、より良い方程式が存在する可能性があると確信しています。

  • 両端にある = を除外すると、これが 1,971,648 減少します。
于 2013-05-24T12:39:36.827 に答える