Python兔子毒药问题实例分析

所属分类: 脚本专栏 / python 阅读数: 907
收藏 0 赞 0 分享

本文实例分析了Python兔子毒药问题。分享给大家供大家参考。具体分析如下:

问题大致是这样的:1000瓶无色无味的液体,其中一瓶为毒药,其它皆为清水,毒药只取一滴与清水混合为一瓶也可以毒死兔子。现在有10只兔子,当兔子喝下毒药两个小时后死去,请设计一种方案,能够在24小时内找到这瓶毒药。
................2分钟后
前面的问题你一定想清楚了,那么略改动一下:1000瓶无色无味的液体,其中一瓶为毒药,其它皆为清水,毒药只取一滴与清水混合为一瓶也可以毒死兔子。现在有10只兔子,当兔子喝下毒药20个小时后死去,请设计一种方案,能够在24小时内找到这瓶毒药。
................2分钟后
有多种方法,比如我每隔5分钟给兔子喝一次100瓶液体混合在一起的东西,根据兔子死去的先后顺序,就可以判断是那一瓶了。

有没有更好的办法呢,我这里仅仅提供一种时间最优的方法,也就是在20个小时找到这瓶毒药。当然也可以有死的兔子最少,在死去兔子和时间找到一个最佳折中点的优化问题。
方法如下:
给10只兔子编号1-10,每只兔子代表一个数,列表如下:
编号    1    2    3    4    5    ...    10
数字    1    2    4    8    16    ...    512

瓶子也有编号,依次为1-1000。    呵呵,聪明的你应该知道我要怎么做了吧,不过我还是要说下去,并写python代码来实现。
我希望是当编号为Y1,Y2,Y3...的兔子死去时,可以推导出编号为X瓶子为毒药。比如编号为1,2,4的兔子死去,那就得知 兔子对应的数字 为1+2+8=11,就是编号为11的瓶子是毒药。比如编号为1,4,10的兔子死去,那就得知 兔子对应的数字 为1+8+512=521,就是编号为521的瓶子是毒药。
现在的问题就是要知道编号不同的每只兔子要喝哪几瓶液体。

Python代码如下:

def main():
    """
  baselist是兔子编号从1-10对应的数字,
  result是最终每只兔子要喝的液体
    """
  baselist=[1,2,4,8,16,32,64,128,256,512]
  result=[[],[],[],[],[],[],[],[],[],[]]
  for water in range(1,1001):
    watertmp=water
    for i in range(9,-1,-1):
      if (watertmp-baselist[i])>=0:
        watertmp -= baselist[i]
        result[i].append(water)
  for i in range(1,11):
    print "The Num %d rabit need drink the next liquid " % i+1,result[i]
  pass
if __name__=="__main__":
  main()

希望本文所述对大家的Python程序设计有所帮助。

更多精彩内容其他人还在看

pandas的qcut()方法详解

这篇文章主要介绍了pandas的qcut()方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

从列表或字典创建Pandas的DataFrame对象的方法

这篇文章主要介绍了从列表或字典创建Pandas的DataFrame对象的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

pandas.DataFrame的pivot()和unstack()实现行转列

这篇文章主要介绍了pandas.DataFrame的pivot()和unstack()实现行转列,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

pandas中的series数据类型详解

这篇文章主要介绍了pandas中的series数据类型详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

pandas 时间格式转换的实现

这篇文章主要介绍了pandas 时间格式转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

python中时间、日期、时间戳的转换的实现方法

这篇文章主要介绍了python中时间、日期、时间戳的转换的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

pandas进行时间数据的转换和计算时间差并提取年月日

这篇文章主要介绍了pandas进行时间数据的转换和计算时间差并提取年月日,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法

这篇文章主要介绍了详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

python和c语言的主要区别总结

在本篇文章里小编给各位整理了关于python和c语言的主要区别的相关知识帖内容,有需要的朋友们学习阅读下。
收藏 0 赞 0 分享

选择Python写网络爬虫的优势和理由

在本篇文章里小编给各位整理了一篇关于选择Python写网络爬虫的优势和理由以及相关代码实例,有兴趣的朋友们阅读下吧。
收藏 0 赞 0 分享
查看更多