LeetCode ソリューションの概要 2591. 最も多くの子供たちにお金を分配する

ディレクトリリンク:

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;
    }
};

おすすめ

転載: blog.csdn.net/AA5279AA/article/details/133163080