ウエイトリフティングをするとき、バーに数枚のプレートをつけて比重を出したいです。
私は次の皿を持っています:
- 各1 kgの6つのプレート
- 各2.5 kgのプレート6枚
- 各5 kgのプレート6枚
- 各10 kgのプレート6枚
バー自体の重量は10 kgです。
プレートはペアでのみ取り付けることができます-プレートはバーの両端に取り付けられ、両端の配置は完全に対称でなければなりません(たとえば、2つの5 kgプレートを一方の端に取り付け、1つの10 kgプレートを安全上の理由から、もう一方の端は禁止されています)。
特定の総重量を得るために使用する必要がある各種類のプレートの数を教えてくれるプログラムまたは関数を作成します。入力は11より大きい整数です。出力は4つの数値のリスト/配列/文字列です。既存のプレートを組み合わせて目標重量を取得することが不可能な場合は、ゼロ/空の配列、無効な文字列を出力し、例外などをスローします。
いくつかの解決策がある場合、コードは1つだけを出力する必要があります(ユーザーに選択させないでください-彼は他のもので忙しすぎます)。
テストケース:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
コードが数値を逆の順序で出力する場合(重いプレートから軽いプレートへ)、混乱を避けるためにこれを明示的に指定してください。