算法题:1000个苹果和10个箱子

最近去面试笔试遇到一道算法题,题目是放在最后面的加分题,大概内容如下:

现在有1000个苹果,和10个箱子,如何把这1000个苹果装在这10个箱子里,才能使不管任何数量(1-1000)的苹果,都能一次给出?

当时我基本没思路,也没多少时间,直接跳过了;

后来查了一下,用到二进制的思想;

1000个苹果,最接近1024,转化为2进制,需要占用10个bit,则从右往左数,第一个bit位表示1个苹果,第二个

bit位表示2个苹果,第三个bit位表示4个苹果,,,第10个bit位表示剩下的489个苹果。分别把这些通过放入

相同编号的箱子里。当需要某一数量的苹果时,查看这些数量的哪些bit位为1,为1则表示这个bit位代表有苹果,

取出对应编号的箱子即可。

框编号10987654321
苹果数目4892561286432168421
  • 小于512个苹果用1-9号框表示,如 7–>111(二进制) 用3、2、1号表示;

  • 大于512个就用10号框,剩下的用前面9个框表示。如 666-489=177,177–>10110001,所以589用10、8、6、5、1号;

还有其他博友那淘来的毒药问题,异曲同工:

有8瓶液体,其中一瓶是毒药,毒性可使小白鼠饮用后在20小时内阵亡,需要几只小白鼠才能在20小时内判断哪一瓶是毒药?

给8瓶毒药编码:

第一瓶:000

第二瓶:001

第三瓶:010

第四瓶:011

第五瓶:100

第六平:101

第七平:110

第八平:111

只需3只小老鼠

第一只老鼠喝最后bit位为1的,即第2,4,6,8瓶

第二只老鼠喝中间bit位为1的,即第3,4,7,8瓶

第三只老鼠喝第一bit位为1的,即第5,6,7,8瓶

如果20小时后,没有老鼠死亡,则第一瓶有毒,否则:

假设第二只和第三只老鼠死亡,把对应位上bit设为1,即110,所以第7瓶有毒。

参考:

https://www.cnblogs.com/Kiven5197/p/5475862.html

https://blog.csdn.net/qq_37752223/article/details/88614797

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值