分金条

一、一个经典的问题:
你让工人为你工作 7 天,给工人的回报是一根金条。金条平分成相连的 7 段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?

二、思路:
1. 金条是可以找钱的,如工人有一段金条,付当天工钱时可以用2段去换工人的一段,不能说工人拿到金条了马上拿去花了,那就没得玩了
2. 金条只允许弄断2次,也就是说最后只有3段金条
3. 因为工人每天拿到的工钱是递增的,也就是说工人会依次拿到 1, 2, 3 ... 7段金条
4. 因此,这个问题可以转化为:如何用3个数进行组合后,可以得到 1, 2, 3 ... 7,而且这3个数其中的任何一个在某一天可能在我这里,也可能在工人哪里,如果我们用1表示某个数在我这里,用0表示不在我这里,根据数理逻辑,这刚好就是一个二进制数表达的问题:
这3个数就是:
1 1 1
我们发现3位的二进制可以表达的数字是 0 ~ 111,也就是0 ~ 7,刚好满足题目的要求,那么接下去就简单了,3位二进制的每一个位即表示一段金条的长度,该位为1,表示此段金条在我这里,为0表示则付给工人了。
那3位对应的二进制数就是:1, 2, 4
支付方法刚好就是一个真值表:
第一天:110, 给工人1段的金条
第二天:101, 给工人2段的金条,拿回1段金条
第三天:100, 1段和2段的金条都给工人
第四天:011, 给工人4段的金条,拿回1段和2段的金条
第五天:010, 再给工人1段的金条
第六天:001, 给工人2段的金条,拿回1段金条
第七天:000, 金条就都给工人了

三、扩展
弄清楚这个问题的本质后,我们再往前扩展一下,如增加一个位,就会变成1111,可以表达0~15,那么题目同样可以换为一个工人为你工作15天,金条只能分4段,问该怎么分?如果看清楚了上面的思路的朋友,我相信应该很快就能解答出来。

时间: 2024-10-06 12:07:28

分金条的相关文章

智力题(农民分金条问题)

题目:你让农民为你工作7天,给他的回报是一根金条.金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费,保证该农民在七天中任意一天结束时都可以领到相应的报酬.(例:第一天结束时他可领到1/7,第三天结束时他可领到3/7) 解答:将7份分成1/7,2/7,4/7.第一天结束时给1/7,第二天结束时给2/7,然后将农民手上的1/7要过来.第三天结束时将1/7给农民,第四天将4/7给农民,再将农民手里的3/7要过来,第五天再给1/7,第六天......

java面试智力题

智力题,每个正式的笔试.面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇文章中我会总结一些常见的智力题,希望各位读者能在本章所列的题中找出做这类题的方法,克服面试中的难题! 1.农民分金条问题 题目:你让农民为你工作7天,给他的回报是一根金条.金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何 给你的工人付费,保证该农民在七天中任意

一号店笔试题

笔试前参考往年题目. 有道智力题,分金条,网上搜这个关键字就有解. 1. java链接数据库的步骤, preparedstatment 和statement有什么区别 2. session和cookie的区别,怎么用session和cookie来访问共享用户信息 答:参考cookie 和session 的区别详解 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗    考虑到安全应当

《软件性能测试与LoadRunner实战教程》新书上市

  作者前三本书<软件性能测试与LoadRunner实战>.<精通软件性能测试与LoadRunner实战>和<精通软件性能测试与LoadRunner最佳实战>面市后,受到广大软件测试和开发人员的关注与好评.鉴于很多功能测试人员.在校大学生以及众多零基础性能测试人员,对性能测试及LoadRunner工具的极大求知.学习欲望,结合零性能测试基础特点,<软件性能测试与LoadRunner实战教程>在前几本书的基础上,取其之精华部分内容,同时对书的内容进行了丰富,从

一个简单的文件管理程序

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

算法初级面试题07——前缀树应用、介绍和证明贪心策略、拼接字符串得到最低字典序、切金条问题、项目收益最大化问题、随时取中位数、宣讲会安排

第六课主要介绍图,不经常考,故今天先讲第七课的内容,介绍比较常考的树和贪心算法 介绍前缀树 何为前缀树? 如何生成前缀树? 可以查有多少个字符串以"be"为前缀. 如果要判断有没有"be"这个节点,每个节点上加上一个数据项,有多少个字符串以当前节点结尾的(可以查加了多少次特定字符串). 给一个字符串.返回多少个字符串以这个为前缀. 再加一个数据项,记录该节点被划过多少次. 大概实现: 删除逻辑: 根据path是否变为0,来判断是否继续往下删. 可以解决以下问题: 一

c# partial 分部类和分部方法

一.partial 它是一个关键字修饰符.可以将类或结构.接口或方法的定义拆分到两个或更多个源文件中. 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来.修饰符不可用于委托或枚举声明中. 二.分部类 在以下几种情况下需要拆分类定义: 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理. 使用自动生成的源时,无需重新创建源文件便可将代码添加到类中. Visual Studio 在创建 Windows 窗体.Web 服务包装器代码等时都使用此方法.

MySQL分库分表方案

1. MySQL分库分表方案 1.1. 问题: 1.2. 回答: 1.2.1. 最好的切分MySQL的方式就是:除非万不得已,否则不要去干它. 1.2.2. 你的SQL语句不再是声明式的(declarative) 1.2.3. 你招致了大量的网络延时 1.2.4. 你失去了SQL的许多强大能力 1.2.5. MySQL没有API保证异步查询返回顺序结果 1.2.6. 总结 MySQL分库分表方案 翻译一个stackoverflow上的问答,关于分库分表的缺点的,原文链接: MySQL shard

数据库分库分表

1. 数据库分库分表 1.1. 前言 1.1.1. 名词解释 1.2. 数据库架构演变 1.3. 分库分表前的问题 1.3.1. 用户请求量太大 1.3.2. 单库太大 1.3.3. 单表太大 1.4. 分库分表的方式方法 1.4.1. 垂直拆分 1.4.2. 水平拆分 1.5. 分库分表后面临的问题 1.5.1. 事务支持 1.5.2. 多库结果集合并(group by,order by) 1.5.3. 跨库join 1.6. 分库分表方案产品 1.7. 为什么不建议分库分表 1.8. 参考