ディレクトリリンク:
Likou プログラミングの質問 - 解決策の概要_共有 + 録音 - CSDN ブログ
GitHub 同期問題解決プロジェクト:
https://github.com/ September26/java-algorithms
原題リンク:LeetCode 公式サイト - 世界中のオタクに愛されるテクノロジー成長プラットフォーム
説明する:
money
あなたが持っているドルの合計金額を表す 整数 と、children
そのお金を分配したい子供の数を表す別の整数が与えられます。
次のルールに従って配布する必要があります。
- すべてのお金は分配されなければなりません。
- 各子供は少なくとも
1
米ドルを受け取ります。 - 誰も
4
ドルをもらえません。
上記のルールに従ってお金を割り当て、 正確に$ を受け取る子供の 最大数を返してください 。割り当て計画がない場合は、 を返します 。 8
-1
例 1:
入力:お金 = 20、子供たち = 3 出力: 1 説明: $8 を受け取ることができる子供の最大数は 1 です。割り当ての 1 つは次のとおりです: - 最初の子供に 8 ドル。 - 2人目の子供に9ドルを割り当てます。 - 3 ドルを 3 人目の子供に割り当てます。 複数の子供が 8 ドルを受け取ることになる割り当てはありません。
例 2:
入力:お金 = 16、子供たち = 2 出力: 2 説明:各子供は $8 を受け取ります。
ヒント:
1 <= money <= 200
2 <= children <= 30
問題解決のアイデア:
* 問題解決のアイデア:
※まずは判断してください、money<childor、money=4かつchildren=1の場合は絶対に割り当てられません。
* 次に、3 つのシナリオに分割されます。お金 > 8 * 子の場合、結果は子-1 となり、各子には 8 が割り当てられ、最後の子には残りすべて (>8) が割り当てられます。
* たまたま 8, 8, 4 の構造の場合、結果は Children-2 になります。
* それ以外の場合は、各人に 1 つを割り当てた後、7 で割ることが望ましい結果になります。
コード:
class Solution2591
{
public:
int distMoney(int money, int children)
{
if (money < children)
{
return -1;
}
if (money == 4 && children == 1)
{
return -1;
}
if (money > 8 * children)
{
return children - 1;
}
if ((8 * children - 4) == money)
{
return children - 2;
}
return (money - children) / 7;
}
};