-1

これが私の問題です: 「1、2、3、4 の 4 桁をあげます。これらの 4 桁すべてを使用して、1、2、3 などの数式を作成してください。勝者は、は 1 から上の最​​も長い範囲の数値を生成します. 数学記号 + - * / を使用できます. さらに括弧と平方根を使用できます. 数字を並べて配置して 2 桁または 3 桁の数値を形成できることに注意してください.例は次のとおりです。

1 = ( 3/1 ) - ( 4/ 2 )

2 = ( 2 * 3 ) – ( 4/1)

3 = 21 / ( 3 + 4 )

4 = "

したがって、次のアルゴリズムが必要です。

    `Input: an integer`

    `Output: an expression formed by digits 1,2,3,4`

今のところ、ブルート フォース アルゴリズムしか考えられません。

First try the expression which formed by only one-digit number. In this expression, try all 4 operators +,-,*,/ in every possible position. Then try to put more bracket.

Then try try the expression which formed by two-digit number and two one digit number...

しかし、すべてのケースを考えることができないため、このアルゴリズムを実装するのは困難です。

誰かがより良いアイデアを持っていますか?

4

2 に答える 2

1

式に複数の数字が含まれている可能性がありますか?

よろしければ、番号が付けられた 1 から 4 の式だけが必要です。基本式の 1 つに 4 を繰り返し追加することで、他のすべての自然数を計算できます。

数字が正確に 1 回出現する必要がある場合は、当面は括弧と平方根を無視します。式の長さは最大 7 スロットです。4 桁 (並置された数字は数字を形成します) で、最大 3 つの (インフィックス) 演算子です。それは徹底的な検索に適しているはずです。

7 つのスロットを持つ式のカウントの例:

(7 4 を選択) * 4! * (4 から 3 を選択) * 3!

7 つのうち 4 つの位置、上の 4 桁を並べ替える これらの位置では、4 つのオペレーターから 3 つを選択し、それらの順序を並べ替えます。

括弧は、最大 6 つのスロットを追加します。演算子ごとに最大 1 つのペアです (そうしないと、式が構文的に正しくありません)。

平方根は、数字が占めるスロットの前、開き括弧の前、および別の平方根の前に配置できます。各数字は 1 回しか出現しないため、平方根なしで表現できる最大数には制限があることに注意してください。Roots Shrink は任意の数 > 1 であるため、反復される Square Root Applications の最大数も制限されます (最大で 4 だと思います)。

于 2013-09-05T23:10:13.367 に答える