问题描述:You have two jugs: a A-gallon jug and a B-gallon jug ( A > B ). Neither of the jugs have markings on them. There is a pump that can be used to fill the jugs with water. How can you get exactly C gallons of water in the A-gallon jug? Suppose the B <= C <= A and they are integer.
算法实现:

def jar(large_size, small_size, want, jar_large=0, jar_small=0, round=1):"""large_size: 大罐的容积small_size: 小罐的容积want: 希望最终取到的水的体积jar_large: 此时大罐中的水的体积jar_small: 此时小罐中的水的体积round: 进行了多少轮取水"""print('round:%s' % round)# 若大罐尺寸和小罐头线性相关,# 除非want和他们俩也线性相关,# 否则不可能完成if large_size % small_size == 0 and \large % want != 0 and \small_size != 1:return False# 如果want是小罐容量的倍数,# 且小于大罐容量,则进行want/small_size次就可以完成if want % 3 == 0 and want < large_size:return want, 0# 基本情况(base case)if jar_large == want:return jar_large, jar_smallelif jar_small == want:jar_large = jar_smalljar_small = 0return jar_large, jar_small# 正常递归程序(normal process)# 如果大罐为空,将大罐灌满elif jar_large == 0:jar_display(large_size, jar_small)return jar(large_size, small_size, want,large_size, jar_small, round+1)# 如果大罐中的水大于小罐的最大容量# 用大罐将小罐灌满,然后将小罐倒空elif jar_large > small_size:jar_display(jar_large-small_size+jar_small, 0)return jar(large_size, small_size, want,jar_large-small_size+jar_small, 0, round+1)# 否则,大罐中的水少于小罐容量,# 将大罐中的水倒入小罐else:jar_display(0, jar_large)return jar(large_size, small_size, want,0, jar_large, round+1)def jar_display(jar_large, jar_small):print('------------------')print('large:%s\nsmall:%s' % (jar_large, jar_small))print('------------------')

程序测试代码:

def main():large_size = 10small_size = 3for i in range(1, large_size+1):jarLarge, jarSmall = jar(large_size, small_size, i)print('finished:\nlarge:%s\nsmall:%s' % (jarLarge, jarSmall))main()

python实现:无刻度的一大一小水罐取水问题相关推荐

  1. 第7章第24节:双图排版:两张图片的一大一小对比排版 [PowerPoint精美幻灯片实战教程]

    当版面中的两张图片,具有不同的重要性时,可以考虑将比较重要的图片放大显示,使版面产生鲜明的对比效果.首先将这张图片移到幻灯片的左上角. 由于这张图片比较能够展现幻灯片的主题,所以需要着重显示.因此在此 ...

  2. python 在无网络环境下安装包

    python 在无网络环境下安装包 1 找到python包路径 C:\Users\admin\AppData\Local\Programs\Python\Python36-32\Lib\site-pa ...

  3. mfc怎么改按钮的按下状态_【荐读】马桶上一大一小的按钮该怎么按?原来这些年都错了...

    马桶水箱上有两个冲水钮,一半大一半小,你知道它们有什么作用吗?日常使用马桶时两个冲水按钮,要怎么按才正确?今天终于有答案了..... 两按钮的作用 水箱一大一小的按钮,分别代表着满水和半水排水的功能. ...

  4. 电源滤波为何通常是一大一小两个电容并联?

    在大部分的电源滤波电路中,滤波电容通常是一大一小两个不同容值的电容并联组成,那么原因在哪里呢?能否用一个电容代替呢?下面我们就来简单探讨一下这些问题. 在解决上面的问题之前,我们必须要了解一下电容的高 ...

  5. python操作无界面的chrome浏览器(转)

    python操作无界面的chrome浏览器 python 操作无界面chrome浏览器 python操作无界面的chrome浏览器.主要利用selenium 和对应自己电脑上Chrome浏览器版本的w ...

  6. 高频滤波电路(电源那里的一大一小两个电容)

    通信原理实验虽然结束有些天了,但是通信原理实验指导书上的滤波电路(如图1所示)一直在纠结着自己.改滤波电路跟自己之前见过的不大一样,两个滤波电容的容值是相等的,而这个电路的两个滤波电容的容值是不相等的 ...

  7. 诺基亚 android 7.0,在中国首发! 诺基亚两款Android 7.0新机曝光:一大一小

    对于老粉丝来说,等来诺基亚安卓手机应该不会是太遥远的事情了,不过只是贴牌生产的它,真的还有入手的必要吗?现在,最新的消息称,诺基亚准备的两款安卓手机预计最快年底前发布,其完全由富士康设计和生产,定位高 ...

  8. VRAR领军Google发布一大一小Pixel_VRAR123

    原文链接:VRAR领军Google发布一大一小Pixel_VRAR123 两部新机均採用最新的 Qualcomm Snapdragon 821 四核心处理器,亦会预载了最新的作业系统 Android ...

  9. 语音处理:Python实现dBFS刻度和采样值相互转换

    语音处理:Python实现dBFS刻度和采样值相互转换 问题背景 功能思路 Python源码 相关资料 问题背景 项目在处理不同位深的音频信号时,时常需要涉及到样点值和dB对数域切换,不想反复去分析公 ...

  10. python画图横轴刻度间隔设置为3个月_Python 天气情况数据分析及可视化

    Python 天气情况数据分析及可视化 环境配置 Pycharm开发环境 python 版本 python3.7 Anconda 集成开发环境 第三方库导入 ## pip install 模块 清华大 ...

最新文章

  1. 测试进口原装磁屏蔽电感 10MH的漏感以及在再生高频放大检波电路中的应用
  2. CountDownLatch 的使用小例
  3. 为什么我们做分布式要用 Redis ?
  4. 百度搜索,你画了好大一张饼,你还打算欺骗多少人呢?有图为证
  5. lncrna研究,2021最新相关资料合集
  6. mega x_[MEGA DEAL] 2020年完整的Java Master Class Bundle(96%)
  7. Python的特殊成员
  8. spring-data-JPA使用JpaRepository注解自定义SQL查询数据库多表查询
  9. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
  10. 如何理解许多Android布局
  11. 直接拿来用!Google 新推 AI 模型打破了现有 CNN 技术壁垒
  12. 前端设计必备-Font awesome 插件使用菜鸟言语
  13. MaxScale Binlog Server实践
  14. 上计算机课玩游戏检讨400字,上网课玩游戏检讨书
  15. 微积分 --- 以e为底的指数函数(个人学习笔记)
  16. 回归模型中截距项的意义_计量经济学第12讲(时间序列计量经济学模型:协整与误差修正模型)...
  17. 计算机右键 管理,鼠标右键菜单管理方法?
  18. 常用APP签名存档以及获取签名的几种方式介绍
  19. c#制作仿win7屏幕键盘之笔记
  20. lc用U盘更新固件_索尼电视安卓8.0固件升级完后电视连不上WIFI?最新解决方法!...

热门文章

  1. MySQL登录时出现的Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: YES) 的解决办法
  2. #最短路径,最小生成树#CH 6202 黑暗城堡
  3. Csico IPPS 测试程序 autodialer.jsp
  4. c语言char10是什么意思,c语言char是什么意思
  5. 北大计算机系女神每天必看必学的IT公众号
  6. item_half - 淘宝每日半价接口
  7. 外链对网站的作用(2022网站还有必要做外链吗)
  8. 《算法艺术与信息学竞赛》之 递推 例一 月亮之眼 vijos 1540
  9. python3爬虫有道翻译_【Python3爬虫】有道翻译
  10. xp系统如何启用服务器服务,xp系统怎么样启用远程服务器