题目描述:

There are 1000 buckets, one and only one of them contains poison, the rest are filled with water. They all look the same. If a pig drinks that poison it will die within 15 minutes. What is the minimum amount of pigs you need to figure out which bucket contains the poison within one hour.

Answer this question, and write an algorithm for the follow-up general case.

Follow-up:

If there are n buckets and a pig drinking poison will die within m minutes, how many pigs (x) you need to figure out the "poison" bucket within p minutes? There is exact one bucket with poison.

要完成的函数:

int poorPigs(int buckets, int minutesToDie, int minutesToTest)

说明:

1、这其实是一道数学题,想明白了代码不超过两行。我不会说我连前面的1000个桶这道具体的题目都做错的……直到看见答案才明白过来。

2、具体数字的题目,答案是5,不是8、也不是23、更不是250。具体解法如下:

假设有25个桶,我们只需要两只猪。把25个桶放成5行5列,如下形状:每个×代表一个水桶。

  0min 15min 30min 45min 60min
0min × × × × ×
15min × × × × ×
30min × × × × ×
45min × × × × ×
60min × × × × ×

第一只猪在0min喝下第一行的水,在15min喝下第二行的水,在30min喝下第三行的水,在45min喝下第四行的水。如果45min喝下60min出结果的时候,猪还没say goodbye的话,那么毒必定在最后一行。

与此同时,第二只猪在0min喝下第一列的水,15min喝下第二列的水……类推。如果45min喝下60min出结果的时候,猪还在,那说明毒在最后一列。结合第一只猪的结果,说明毒在最后一行最后一列。

我们可以看出,一只猪可以判断一个维度的信息,两只猪可以决定两个维度的信息,也就是5^2=25个水桶的情况可以由两只猪判断得出。

所以三只猪可以判断5^3=125,四只猪可以判断5^4=625,五只猪可以判断5^5>1000个水桶的情况。

3、所以放到通用的题目里面,n个待判定的水桶,限时p分钟,m分钟出一次结果,这道题结果就是ceil(log(p/m+1)n),ceil是取上限函数。

代码如下:

    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {int chances=floor(minutesToTest/minutesToDie);return ceil(log10(buckets)/log10(chances+1));//变换一下底数,以10为底,结果一样}

上述代码实测2ms,beats 100% of cpp submissions。大家做的都一样。

转载于:https://www.cnblogs.com/chenjx85/p/8930819.html

leetcode-458-Poor Pigs相关推荐

  1. LeetCode 458. Poor Pigs--智力题「小白鼠试毒」--C++,Python解法

    题目地址:Poor Pigs - LeetCode There are 1000 buckets, one and only one of them is poisonous, while the r ...

  2. 458. Poor Pigs

    问题描述:有1000桶水,其中一桶是有毒的,一只猪喝完有毒的水之后会在15分钟内死亡.一个小时内用多少只猪可以找出有毒的水.并且推广来讲,一共buckets桶水,总时间为minutesToTest,猪 ...

  3. LeetCode 458. 可怜的小猪(信息论方法)

    题目描述 有 1000 只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在 15 分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒 ...

  4. LeetCode 所有题目总结

    文章目录 做题注意事项 题目分类 1.位运算 2.字符串题型 3.TopK 问题--最大堆/最小堆 4.链表 5.动态规划 easy Medium hard 6.贪心 7.树 8.图 9.数学题 10 ...

  5. Python JAVA Solutions for Leetcode

    Python & JAVA Solutions for Leetcode (inspired by haoel's leetcode) Remember solutions are only ...

  6. LeetCode 简单算法题

    使用Nodejs 抓取的LeetCode 简单算法题  一步一步来,先攻破所有简单的题目,有些题目不适合使用JS解决,请自行斟酌 Letcode 简单题汇总 104. Maximum Depth of ...

  7. Leetcode算法题-解法转载

    版权声明:本文为博主原创文章,未经博主允许不得转载.    https://blog.csdn.net/fuxuemingzhu/article/details/85112591 作者: 负雪明烛 i ...

  8. LeetCode All in One 题目讲解汇总(持续更新中...)

    原文地址:https://www.cnblogs.com/grandyang/p/4606334.html 终于将LeetCode的大部分题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开 ...

  9. LeetCode 力扣算法题解汇总,All in One

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: https://fuxuemingzhu.cn 关键词:LeetCode,力扣,算法,题解,汇总,解析 把自己刷过的所有题目做一个整理, ...

  10. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

最新文章

  1. memcache的分布式缓存问题
  2. Java并发工具类(闭锁CountDownLatch)
  3. ssh密码长度漏洞java_Linux中 OpenSSH 输入验证错误漏洞(CVE-2019-16905) 修复解决方案...
  4. Vue手动封装实现一个五星评价得效果
  5. Linux-Ubuntu部署Springboot项目应用到生产环境(jar方式)
  6. Flash位图锯齿的处理办法
  7. python 去掉tab_Python使用crontab模块设置和清除定时任务操作详解
  8. java坦克大战爆炸效果_Java坦克大战 (五) 之产生敌方坦克和爆炸效果
  9. AI中台——智能聊天机器人平台的架构与应用(分享实录)
  10. font-family
  11. 第4章第3节:如何插入或删除表格的行与列 [PowerPoint精美幻灯片实战教程]
  12. C51单片机烧录器使用(USB转TTL)
  13. 都说学3D建模赚钱,到底学了能做什么?
  14. 《击掌为盟》读后感1742字
  15. 微型计算机 2018 12月下,桌面CPU天梯图2018年12月最新版 十二月台式电脑处理器排名...
  16. iphone12绿色好看 iphone12系列哪个颜色好看
  17. 利用PHP编程生成蜘蛛访问记录txt文档
  18. windows xp 自动登录
  19. 金山毒霸6 、金山网镖6 增强版 发布在即!!!
  20. 集成电路布图设计专有权保护客体及内容确定

热门文章

  1. 下载python步骤_下载及安装Python详细步骤
  2. protobuf message定义_ProtoBuf 协议设计与开发
  3. php ip to int_ip地址和int相互转换
  4. sklearn输出模型参数_如何使用sklearn优雅地进行数据挖掘?
  5. 相机开发:海康板卡相机开发
  6. MFC:多窗口函数、变量调用
  7. 全球及中国壁纸市场盈利预测与投资风险分析报告2022-2027年
  8. 东平谋定农业功能化-农业大健康·万祥军:品牌化精准扶贫
  9. openresty开发系列20--lua的时间操作
  10. mysql数据库主从配置