追求极致完美的算法思路(¯﹃¯)————扔玻璃杯问题

d78846b9e88b4c93a0a270a1ddee1a55.jpg

————————————————————————————

(¯﹃¯)从第一层到第100层,一层层扔绝对是不对的

运气好的话,肯定是一层就能试出来,但假设运气最不好呢?

………………………………………………………………………………………

首先,俩易想到的思路,简述一下

………………………………………………………………………………………

第一个,二分法,就是第一个杯子在50层扔,那么,若没碎,那确实仍会范围缩小。但若碎了,剩下一个只能从第一层到第49层一个个试,那么运气最不好,就要试50次。[也就是此方法,运气最不好要试50次]

………………………………………………………………………………………

第二个,分层,以每10个分层(或者说一组),就是第一次在第10层(第一分层)扔,若碎再试1-9层(需试1+9次);若不碎第二次在第20层(第二分层)扔,若碎再试11-19层(需试2+9次)…………运气最不好在第10分层(组),就是要试10+9次[也就是此方法,运气最不好要试19次]

………………………………………………………………………………………

到重点了,上最后一个方法,对第二个进行优化,使得每分层(组),运气最不好时应该试的次数一样,那么就是第一次在第x层试,下次在x加x-1层试……。

这里提前说下,第一次分层扔应在第14或15层扔,可以先思考下为什么?

 

 

那个为啥是14和15是由于

它思路是在按10分层的基础上,使得每次分的那个地方,尝试的次数尽可能一样

原本是,若在每次分层的那个地方碎,会试10,11,12,13……19次

 

它希望这些次数是一样的,那么每次分层的地方试出的次数应该是(10+19)/2=14.5,因为是整层碎,就要考虑第一次扔是14层还是15层好(他们都是在第一次n层试,下次在n-1层试)

 

15层的话,就是15+14+13……+7=99,再加一就是100,15-7+1=9,一共9个数,那么若在最后一次分层那个地方碎,就是要试10次,若是其它分层处碎,就是15次

 

14层的话,14+13+12+11+……+4=99,再加一为100,14-4+1=11就是11个数,那么在最后一个分层碎就是要试11+1=12次,若在其它分层碎就是要试14次

………………………………………………………………………………………

最后一个方法还一个简单理解思路

10乘10等100,

9乘9等于81,但为了那个匀次数,实际是9个不一样的数,即15+14+……+7(共9个数)

11乘11等于121,但为了匀次数,实践是11个不一样的数,即14++13+12+……+4(共11个数)

 

11和9最接近10,其它不用想

………………………………………………………………………………………

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值