数値で構成される文字列を指定し、+ または - 記号を追加して式の値を 0 にします。式を返します。
例えば、
123 => 1 + 2 -3 = 0
173956 => 17 + 39 - 56 = 0
力ずくの方法以外に、この問題を解決する手がかりはありません。
何か提案はありますか?
数値で構成される文字列を指定し、+ または - 記号を追加して式の値を 0 にします。式を返します。
例えば、
123 => 1 + 2 -3 = 0
173956 => 17 + 39 - 56 = 0
力ずくの方法以外に、この問題を解決する手がかりはありません。
何か提案はありますか?
これは検索の問題です。検索は解空間で実行する必要があります。「123」文字列から開始するとします。この時点で、「1」の後に + または - 記号を追加すると、「1 + 23」または「1 - 23」が得られます。すべてのバリアントは、次の文字の後に記号を追加することでさらに分割できます。その結果、すべての可能な記号の追加は、ツリーのような構造 (解空間) を形成します。アルゴリズムは、この構造で解を検索する必要があります。これには A* を使用できると思います。
Anders Kは、解空間の素敵な ASCII グラフを描画します。解を検索するだけで済みます。単純な幅優先探索や深さ優先探索でもできますが、解空間が大きいと遅くなると思います。
また、解空間の性質、例えば木のような構造を利用することで、より最適な具体的な解を見つけることができると思います。
たとえば、ツリーとして構造化すると明らかになる再帰的アプローチを使用して、多くの方法で解決できます
例: 123
数字の後に 2 つの異なる記号がある可能性があるため(+|-)
です。
1
/ \
+ -
/ \
2 2
/ \ / \
+ - + -
| | | |
3 3 3 3