LeetCode解法汇总2591. 将钱分给最多的儿童

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。

你需要按照如下规则分配:

  • 所有的钱都必须被分配。
  • 每个儿童至少获得 1 美元。
  • 没有人获得 4 美元。

请你按照上述规则分配金钱,并返回 最多 有多少个儿童获得 恰好 8 美元。如果没有任何分配方案,返回 -1 。

示例 1:

输入:money = 20, children = 3
输出:1
解释:
最多获得 8 美元的儿童数为 1 。一种分配方案为:
- 给第一个儿童分配 8 美元。
- 给第二个儿童分配 9 美元。
- 给第三个儿童分配 3 美元。
没有分配方案能让获得 8 美元的儿童数超过 1 。

示例 2:

输入:money = 16, children = 2
输出:2
解释:每个儿童都可以获得 8 美元。

提示:

  • 1 <= money <= 200
  • 2 <= children <= 30

解题思路:

* 解题思路:

* 首先做判断,如果money

* 然后分为三种场景,如果money > 8 * children,则结果为children-1,每个孩子分配8个,最后一个孩子分配剩余所有(>8);

* 如果恰好为8,8,4的结构,则结果为children-2;

* 否则每个人分配一个后,除以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;
    }
};

你可能感兴趣的:(编程题,leetcode,算法,职场和发展)