暖かい夏の夜だった...
私の愚かな車がスーパーマーケットから帰る道の途中で故障することを決めたとき。私はそれを傍観者に押し、家に帰ることにした。トランクを開けて、食料品や残りのものを取り出しました。そのとき、アイテムが均等に袋詰めされていないことに気づきました。いくつかのバッグにはもっと重いものがあり、他のバッグには軽いものがほとんどありませんでした。私が持ち運びしやすいように、すべてを2つのバッグにまとめて、それらの重量をできる限り近づけることにしました。
あなたの目標
両方のバッグの差ができるだけゼロに近くなるように、2つのショッピングバッグのアイテムを並べ替えるのを手伝います。
数学的に:
WEIGHT LEFT HAND - WEIGHT RIGHT HAND ≈0
例
パンとピーナッツバターの2つのアイテムしかなく、パンの重量が250グラムで、ピーナッツバターが150グラムの場合、最良の方法は両手で別々に運ぶことです。
W LH - W RH = W (パン) - W (P.BUTTER)
250から150 = 100
他の可能性は次のとおりです。
W (パン、P.BUTTER) - W (空手) =(250 + 150) - 0 = 400
これは最初のケースよりも良くないため、最初のケースを使用する必要があります。
あなたのコードは
- ショッピングバッグ内のアイテムの重量を示す数値を入力します。単位は重要ではありませんが、同じである必要があります(理想的にはキログラムまたはグラム)。入力は1つずつ、または一度にすべて実行できます。必要に応じて、合計数を最大20アイテムに制限できます。
- 入力形式/タイプはユーザーが選択できますが、重み以外には何も表示されません。
- 任意の言語を使用できますが、標準ライブラリに固執します。
- 出力を表示します。繰り返しますが、形式は自由に選択できますが、投稿で形式を説明してください。つまり、どのアイテムが左手アイテムであり、どのアイテムが右手アイテムであるかをどのように判断できますか。
ポイント
- 最短のコードが優先されます。
ヒント
私が考えることができる2つの可能なアルゴリズムは、微分(高速)と順列/組み合わせ(低速)です。これらまたはジョブを実行する他のアルゴリズムを使用できます。