力扣2591. 将钱分给最多的儿童

简介: 力扣2591. 将钱分给最多的儿童

题目描述:

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

思路:

纯纯的模拟题,想都不想随便写一下交上去

真的吐了。

这说明一件事,虽然是简单题,但是还是要仔细一点,小心使得万年船啊。

记住这里求的答案不是分配方案数,而是在符合分配方案的集合里面去挑分得8的数量最多的一种方案。

这个题目的答案一共分为三种:

1.有分配方案但是恰好获得8美元儿童没有,是没有也是不可能。此时答案返回为0。

2.没有分配方案,也就是不符合分配方案的要求。

3.除以上两种。

首先我们就要判断什么情况下不能满足分配条件,一种是money小于children,此时不能让每个人都分到最少一美元,第二种是一定存在分给别人4美元的情况,也就是只有一个人,这个时候的钱又刚好等于4,不满足条件的第三点。

然后我们还可以特判一下这种情况:假如money很大,即使每个人都分8美元都还有剩余,这个时候为了让剩下的8最多,只能把多的钱都分给一个人,这样一来,就有children-1个人分到8美元。

然后我们开始正常的模拟:(用ans记录分的的8美元的人数)

1、先每个人都分1美元

2、看剩下的钱还有多少个7美元,这些7美元都可以分出去凑成8美元,ans+=money/7.

3、如果剩下的钱刚好等于3,这个时候已经还有一个人没有分到8美元,那么这个3加上原来的1等于4,不符合分配条件,所以这个时候我们就只能把这3美元再拆出来一部分分到之前的8美元的一个人里面,这个时候的ans--。

代码:

class Solution {
public:
    int distMoney(int money, int children) {
        if(money<children)return -1;
        if(money==4&&children==1)return -1;
 
        int ans=0;
        if(money>children*8)return children-1;//每个人分到8美元都还有多的,那就把多的全给一个人
 
        money-=children;//先每个人分一美元
 
        ans+=money/7;//最多能分多少个7美元,先下取整
 
        money-=money/7*7;//剩下的钱
 
        if(money==3&&ans==children-1)ans--;//如果这个时候还有一个人没有分到8美元,剩下3美元
        return ans;
    }
};


相关文章
|
9月前
|
算法
一支笔,一双手,一道力扣(Leetcode)做一宿
一支笔,一双手,一道力扣(Leetcode)做一宿
|
11月前
|
安全
LeetCode-2100 适合打劫银行的日子
LeetCode-2100 适合打劫银行的日子
|
12月前
|
机器学习/深度学习 安全 测试技术
【刷题日记】2100. 适合打劫银行的日子
本次刷题日记的第 2 篇,力扣题为:2100. 适合打劫银行的日子 ,中等
|
10月前
Leetcode 2591. 将钱分给最多的儿童
Leetcode 2591. 将钱分给最多的儿童
76 0
|
算法 C++
【每日算法Day 65】你能顺利救出地下城里的公主吗?
【每日算法Day 65】你能顺利救出地下城里的公主吗?
|
算法 程序员
【红海游戏】第 281 场力扣周赛复盘
【红海游戏】第 281 场力扣周赛复盘
【红海游戏】第 281 场力扣周赛复盘
献给每一位母亲
母 亲节,就不发技术相关专业的长篇大论了,来点抒情的。
122 0
献给每一位母亲
【力扣】爬楼梯问题 小时候家长考过你吗?
【力扣】爬楼梯问题 小时候家长考过你吗?
【力扣】爬楼梯问题 小时候家长考过你吗?
|
存储
【LeetCode】这儿童节的糖不好吃啊
【LeetCode】这儿童节的糖不好吃啊
124 0
【LeetCode】这儿童节的糖不好吃啊
蓝桥杯-快乐司机
话说现在当司机光有红心不行,还要多拉快跑。多拉不是超载,是要让所载货物价值最大,特别是在当前油价日新月异的时候。
101 0

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    27
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    26
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    27
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    28
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    24
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    31
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    22
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    20
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    21
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    19