10块钱怎么较为平均分给三个人
背景
隔壁王老师遇到了一个问题,学校给了10元钱,需要平均分给张三,李四和王五3人。王老师犯难了。
方案1
张三说,那好办,10 / 3 = 3.33333… 王老师每个人给3.34元那不就好了吗?王老师说,不行呀! 3.34*3 = 10.02 我不是亏了。要不我每个人给3.33元可不可以。 张三坚决不同意,反手举报王老师贪污他们的0.01元。
方案2
聪明的李四说了,要不这样,你先随机打算顺序,前2位给 3.33 元,最后一位给 10 - 3.33 * 2 = 3.34 元。这样就不存在谁亏了的说法。
实现
function equallyMoney($money, $weightMap) : array
{// 这边为了让结果比较公平 应该需要加一步随机 具体按照业务逻辑修改$totalWeight = array_sum($weightMap); // 这里的权重为整数 如果有小数。需要用高精度加法$res = [];foreach ($weightMap as $key => $weight) {$res[$key] = bcdiv(bcmul($money, $weight, 2), $totalWeight, 2);$money = bcsub($money, $res[$key], 2);$totalWeight = bcsub($totalWeight, $weight, 4);}return $res;
}
运行结果
echo json_encode(equallyMoney(10, ['张三' => 1, '李四' => 1, '王五' => 1]), JSON_UNESCAPED_UNICODE);{"张三":"3.33","李四":"3.33","王五":"3.34"} // 共10
王五运气比较好,而且大家相差不大,于是大家散了。
方案3
第二天学校又给了王老师20元钱,要发给张三,李四,王五,赵六,孙七和周八,王老师又拿出原来的算法
运行结果
echo json_encode(equallyMoney(20, ['张三' => 3, '李四' => 3, '王五' => 3, '赵六' => 3, '孙七' => 3, '周八' => 3]), JSON_UNESCAPED_UNICODE);{"张三":"3.33","李四":"3.33","王五":"3.33","赵六":"3.33","孙七":"3.33","周八":"3.35"} // 共20
王五不同意了,为啥我们都是3.33 周八却有 3.35他算什么√8 我不同意。王老师听了三天睡不着觉,于是又了以下算法。
实现
// 这边具体实现中加了权重字段
public static function equallyMoney($money, $weightMap) : array
{// 这边为了让结果比较公平 应该需要加一步随机 具体按照业务逻辑修改$totalWeight = array_sum($weightMap); // 这里的权重为整数 如果有小数。需要用高精度加法$res = [];foreach ($weightMap as $key => $weight) {$res[$key] = bcdiv(bcmul($money, $weight, 2), $totalWeight, 2);$money = bcsub($money, $res[$key], 2);$totalWeight = bcsub($totalWeight, $weight, 4);}return $res;
}
运行结果
echo json_encode(equallyMoney(20, ['张三' => 3, '李四' => 3, '王五' => 3, '赵六' => 3, '孙七' => 3, '周八' => 3]), JSON_UNESCAPED_UNICODE);{"张三":"3.33","李四":"3.33","王五":"3.33","赵六":"3.33","孙七":"3.34","周八":"3.34"} // 共20
最后大家拿到钱,看看人别,感觉不是大亏。于是就散了。
王老师终于能睡个好觉了,他发誓,再也不帮学校分钱了。
10块钱怎么较为平均分给三个人相关推荐
- 一个人花8块钱买了只鸡,9块钱卖了,又10块钱买回来,11块钱又卖了,他赚了多少钱
一个人花8块钱买了只鸡,9块钱卖了,又10块钱买回来,11块钱又卖了,他赚了多少钱? 这是IBM面试时的题目,有四种算法: 1.9-8=1,11-10=1,1+1=2,所以最后赚2元. 2.最初只有8 ...
- 2块一瓶,2空瓶换一瓶,4瓶盖换一瓶,10块钱喝几瓶?
最近看到一个面试题,觉得类似于脑筋急转弯,手里有10块钱,让去买啤酒, 2块钱一瓶,老板有又说:2个空瓶可以换一瓶啤酒,4个瓶盖可以换一瓶啤酒,这样我们到底可以弄到多少瓶啤酒. 第一次我们可以买:5瓶 ...
- 卖肾换来一部iPhone后生活不能自理,那手机电商平台现在卖10块钱!
本文来自公众号"电商报",TechWeb经授权发布 ID | kandianshang 作者 | 电商君 九年前, 有人卖掉一个肾换来一部iPhone 4! 上帝欲让人灭亡,必先让 ...
- 你可能小赚,但苹果永远不亏!华强北老板说一台新iPhone只赚10块钱?
昨天新iPhone正式开售,库克一定又笑开了花.光是预售,iPhone 11系列就拿下了不俗的成绩. 从现如今的结果来看,iPhone 11系列依然保持了真香传统,前一天还在说背后摄像头丑,创新不够, ...
- 一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人。问他赚了多少?
一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人.问他赚了多少? 思路: 一个人花8块钱买了一只鸡,9块钱卖掉了 -----赚一元 花10块钱又买回 ...
- Java 10块钱 换 1元和0.5元
public class Test17 {//10块钱 换 1 元 和 0.5public static void main(String[] args) {//1.定义循环一共十种结果for (in ...
- 酒瓶与瓶盖换酒问题 - 10块钱可以喝多少瓶酒
前些日子有QQ好友发给我下面这个问题: 啤酒2块钱1瓶,4个盖换一瓶,2个空瓶换一瓶,问10块钱可以喝多少瓶. 当时没有时间算这个问题(其实就是懒得动笔和动脑子),但这几天又老想着这个问题,所以今天决 ...
- python 瓶盖换酒问题(啤酒2块钱一瓶,2个酒瓶可以换一瓶酒,4个瓶盖可以换一瓶酒 问10块钱可以喝几瓶酒)
问题:2元一瓶酒,2个空瓶换一瓶,4个瓶盖换一瓶 问10块钱买几瓶酒?? 最终喝到酒的数量 class Change:def __init__(self,money):self.money=money ...
- 打车起步价13(3公里内),之后每多一公里增加 5块钱. 用户输入公里数就可以计算打车价格,如果有拥堵情况,总价格多收取10块钱拥堵费。(3种方法解答:1.普通函数 2.闭包 3.闭包写法升级)
<!DOCTYPE html> <html><head><meta charset="UTF-8"><title>< ...
最新文章
- nacos mysql8.0修改
- https://enhancer.io
- 阅读源码学设计模式-单例模式
- android drawLayout抽屉布局
- Diango 框架起步
- 【转载】美国煤层气发展史
- 【转】Request.Form.Get() Request.Form Request[]区别
- 调用webservice,解析返回数据为xml格式的字符串,进行数据绑定
- DOS MASM 安装
- 读文万卷025期:使用MRI形态学特征和表观弥散系数预测WHO II/III级胶质瘤分子状态;帕金森病的中脑的定量磁敏感成像
- pta:人民币与美元汇率兑换程序(python)
- 批量提取文件创建时间_文件列表提取软件的使用
- 项目选题-口罩识别检测系统
- spark日志中 Tid是什么
- 第四十二篇:Flink面试方案设计篇
- JAVA性能优化,让程序更快更稳定
- 经典案例oracle和mysql分别比较
- 重构 - 提炼函数,消除重复代码
- java导出html word文档_java生成带html样式的word文件
- vue中使用天地图测距、测面、标点【一】