魔法豌豆
来源:互联网 发布:山大网络教育平台 编辑:程序博客网 时间:2024/04/28 15:45
小仙女有N个袋子,每个袋子装无限豆。N-1个袋子的豌豆是普通豆,每粒重一克。有一个袋子装的是魔法豌豆,每个中两克。每次,小仙女可以从每个袋子里取出若干豌豆,然后放在一起称有多重。由于称坏了,不能正确称出大于1717克的东西,即使大于1717克,称量的结果仍是1717克(不过称不会损坏)。请帮她在10次称量找出装有魔法豌豆的袋子,并找到N的最大值。
解:我们可以从N个袋子中的1716个袋子里面每次取一颗,如果称量的值为1717克时,我们得到此次1716个袋子中某一袋装的是魔法豌豆。然后重复上面的操作K次(K<10),我们总能得到在某一次1716个袋子中可能存在一袋装的是魔法豌豆,否则则为剩下豌豆的袋数为M.。所以,我们可以得到N的最大值是N=K*1716+M(K<10),那么我们怎么样才能确定这个K的最大值以及M的最大值。
首先,我们先确定下如果魔法豌豆在1716个袋子中某一袋需要找到魔法豌豆的次数。我们把袋子分成572,573,571袋三分,分别从每一份的袋子中取0,1,2颗,那么魔法豌豆称的可能重量分别是1715克,1716克,1717克。(K=K+1)
573=83×3+81×4,即把573个袋子分成7份,3份为83个袋子,4份为81个袋子。
从83的袋子里面依次分别0,1,2,81的袋子里面取3,4,5,6颗。撑得的可能重量分别为1707,1708,1709,1710,1711,1712,1713克。(K=K+1)
83=2×40+3,分成41份,40份两袋和一份3袋。3袋取0颗,2袋每份取1,2。。。40,则撑得重量为1640,1641,。。。。1680克。(K=K+1)
3=3×1 (略) K=K+1=10 那么我们容易得到1716个袋子我们需要4次,那么K的最大值为6.。那么N=1716×6+M=10296+M
我们知道如果M<=1716,那么上述依然成立,这时,我们取M=1716求得暂时的最大解,那么是不是可以让M取更大的值,并且依然可以在4次以内找到装有魔法豌豆的袋子呢,事实上是可以的。
以上述分袋求解过程来看,最后总是要剩余袋子把分成每份为一袋的,那么我们就有了一个反推的过程。我们假设有K个一份的袋子,那么每袋取值分别为0,1,2,K-1,那么有取值在区间[(K-1)*K/2,(K-1)*K/2+K-1]内。容易求得K=58.(剩3次)
474=58×8+10,取0——8,得到范围为[1704,1711].(剩2次)
1519=474×3+97,取0——3,得到范围为[1713,1714,17151716](剩余一次)
M=1519×2+98=3136,取值0,1,2,得到范围为[1715,1716,1717]
最后得到Nmax=10296+3136=13432
- 魔法豌豆
- 黑书之1.2.24 寻找魔法豌豆
- 豌豆法
- 抵制豌豆夹
- 魔法
- 魔法
- 黄加阳和他的豌豆
- 豌豆夹导致ADB服务无法开启
- 豌豆夹Redis解决方案Codis安装使用
- 豌豆夹Redis解决方案Codis安装使用
- map 魔法 reduce魔法
- 杂谈---机锋网与豌豆夹的事件冲突
- 【Android】手机连接豌豆夹USB未开启报错
- 豌豆花开花蕊红太平军哥哥一去无影踪
- 从QA到EP----豌豆实验室技术总监看QA
- 豌豆夹Redis解决方案Codis源码剖析:Proxy代理
- 豌豆夹Redis解决方案Codis源码剖析:Dashboard
- cocos2dx 植物大战僵尸 15 豌豆射手的实现
- 函数strspn的实现——Ada应用实例之八
- 从 QueryStringBuilder.cs 说起
- 汉语程序设计语言的技术优势
- spring acegi 权限设计
- 怎样成为一名程序员的四个阶段!!!
- 魔法豌豆
- Scripting.FileSystemObject对象不能创建的原因
- form 回车自动提交问题
- va_list va_start vsprintf
- 郁闷——局部刷新的12031
- 成为程序员的标准
- Log4j日志记录的相对路径问题与打印HQL
- Java程序设计——面向对象编程部分
- 现代程序员的几个错误观点(一)