给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。
你需要按照如下规则分配:
所有的钱都必须被分配。
每个儿童至少获得 1 美元。
没有人获得 4 美元。
请你按照上述规则分配金钱,并返回 最多 有多少个儿童获得 恰好 8 美元。如果没有任何分配方案,返回 - 1 。
先上代码:
int distMoney(int money, int children){
int i = 0;
//判断是否有分配方案
if (money < children)
return -1;
else if (money < children + 7)
return 0;
//进行分配
money -= children;
while (children != 0 && money >= 7)
{
money -= 7;
i++;
children--;
}
//判断是否有儿童收到4个苹果,并且判断在此基础上如何分配
if (money == 3 && children <=1||children==0&&money!=0)
{
return i - 1;
}
return i;
}
个人思路:1.先判断是否有分配方案
2.进行分配
3.判断是否有儿童收到4个金钱,并且在此基础上讨论如何分配
一、判断是否有分配方案
if (money < children)
return -1;
else if (money < children + 7)
return 0;
如果金钱数少于儿童个数,则一定会有儿童收不到钱。
如果money<children+7,则意味着在每个儿童都收到至少一元时,必定没有儿童收到8元,则返回0。
二、进行分配
money -= children;
while (children != 0 && money >= 7)
{
money -= 7;
i++;
children--;
}
先确保每个儿童都有钱拿;再进入循环,每当一个儿童再次收到7元时就意味着他有了8元,该儿童符合要求,所以i++;孩子数减少一个。当孩子数量为0或剩下的钱不够再让一个孩子符合要求时,则意味着分配已经大致完成。
此时跳出循环的情形有两种:
1.每个孩子都拿到了8元,并且可能还有多余的钱没分出去。
2.剩下的钱不够让剩下的孩子符合要求.
而在此基础上加入“不能有儿童收到4元钱”这一条件。情形二可以再次分成三种结果:
2.(1)剩下的钱不够3元——返回i;
2.(2)剩下的钱够3元——儿童数量足够大,使剩下儿童中没人够到4元
2.(3)剩下的钱够3元——儿童数量很小——必须有人达到4元
三、分配结果。
if (money == 3 && children <=1||children==0&&money!=0)
{
return i - 1;
}
return i;
而在此基础上加入“不能有儿童收到4元钱”这一条件。
情形1可分为两种结果:
1.(1)刚好分完钱——皆大欢喜——返回i;
1.(2)有多余的钱——必须有人承受多余的钱而因此不满足条件——返回i-1;
情形二可以再次分成三种结果:
2.(1)剩下的钱不够3元——返回i;
2.(2)剩下的钱够3元——儿童数量足够大,使剩下儿童中没人够到4元——返回i;
2.(3)剩下的钱够3元——儿童数量很小——必须有人达到4元——返回i-1;
统计结果可能性写成代码即可。