2591. 将钱分给最多的儿童(Java)

给你一个整数 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

class Solution {
    public int distMoney(int money, int children) {
    	//不满足第二个规则
        if (money < children)
            return -1;
        //优先考虑分给儿童 8 美元,剩余钱数不满足规则则少分一份 8 美元
        for (int i = money / 8; i > 0; i--) {
            int leftMoney = money - i * 8;
            int leftChidren = children - i;
            //超出儿童数量
            if (leftChidren < 0)
                continue;
            //不满足第二个规则
            if (leftMoney < leftChidren)
                continue;
            else if (leftMoney > leftChidren)
            	//不满足第一个规则
                if (leftChidren == 0)
                    continue;
            //不满足第三个规则
            if (leftMoney == 4 && leftChidren == 1)
                continue;
            return i;
        }
        return 0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值