题目:假设有两个杯子A ,B,用户只需要输入两个杯子的容量值和需要获取的杯子数值left_c。问两个杯子通过何种操作能获取到left_c 的数值。

分析:此题目是求解优化的问题。采用bfs算法.

class State:def __init__(self,a,b,prev,step,operation):self.a=aself.b=bself.prev=prevself.step=stepself.operation=operation
visited=[[False for i in range(100)]for j in range(100)]
def bfs(capativy_a,capativy_b,left_c):queue=[]s=State(a=0,b=0,prev=None,step=0,operation=None)queue.append(s)visited[0][0]=Truewhile queue:state=queue.pop(0)for i in range(6):a ,b ,operation =None,None,Noneif i==0:operation =" 将杯子A的水倒空"a=0b=state.belif i==1:operation = " 将杯子B的水倒空"a=state.ab=0elif i==2:operation = " 将杯子A的水倒满"a=capativy_ab=state.belif i==3:operation = " 将杯子B的水倒满"b=capativy_ba=state.aelif i==4:#将杯子A的水倒入杯子B中if capativy_b-state.b>state.a:operation="将杯子A的水倒入杯子B,直至杯子A被倒空"a=0b=state.a+state.belse :operation="将杯子A的水倒入杯子B,直至杯子B被倒满"b=capativy_ba=state.a-(capativy_b-state.b)elif i==5:#将杯子B的水倒入杯子A中if capativy_a-state.a>state.b:operation=" 杯子B中的水倒入杯子A中,直至杯子B被倒空"b=0a=state.a+state.belse:operation="杯子B中的水倒入杯子A中,直至杯子A被倒满"a=capativy_ab=state.b-(capativy_a-state.a)if  not visited[a][b]:new_state=State(a=a,b=b,prev=state,step=state.step+1,operation=operation)visited[a][b]=Truequeue.append(new_state)if left_c==a or left_c==b:print("yes")return new_statereturn Nonedef get_path(state):path=[]while state.prev:path.append(state.operation)state  = state.prevreturn path[::-1]def main():capativy_a= int(input("please input the  A:"))capativy_b= int(input("pleasr input the  B:"))left_c    = int(input("please input the left_c"))result    = bfs(capativy_a,capativy_b,left_c)if not  result:print("error")else :p=get_path(result)print(p)
main()

杯子倒水问题 -python相关推荐

  1. 非常可乐(三个杯子倒水问题)

    题目描述 红红是个肥宅,所以他很爱喝肥宅快乐水.但是每次当红红买了肥宅快乐水后,左左都要求和红红一起分享这一瓶可乐,而且要和红红喝得一样多.但是红红手中只有两个杯子,他们的容量的分别是 N 毫升 和 ...

  2. 杯子 + Kronican

    杯子 Kronican [题目描述] 重庆八中在80周年校庆的时候获捐n个杯子, 每个杯子有两个属性:一个是已装水量 ai,一个是可装水量 bi(ai <= bi). 从一个杯子向另一个杯子倒 ...

  3. 七月刚入职的阿里测试开发岗-高频知识整理,内附面试题答案

    本文是将自己在面试前找工作的部分笔记重新整理了下,不少内容当时是查阅的知乎.博客园.书籍等.我自己在牛客上也学习了很多面经和经验帖,收获了好几家大厂offer.最近整理出来这些,希望能对找测开岗的朋友 ...

  4. 动效引擎_汇众教育 | 高级引擎视效包装设计

    伴随着5G和人工智能时代的到来,影视.动漫.游戏产业飞速发展.与此同时,虚幻引擎4 ( Unreal Engine 4,简称UE4)作为一套面向任何使用实时技术工作用户的完整开发工具,将为那些具备虚幻 ...

  5. c语言循环程序怎么编程,c语言程序(5):循环结构程序设计

    #include #include #include /* 循环结构: 1.基本循环语句 while循环 do_while循环 for循环 1.1 所有的的循环,都是满足条件循环 1.2 while循 ...

  6. Java 面向对象编程的三大特性——封装、继承、多态

    一.类和对象 1. 首先,什么是对象呢? 对象简单的来说就是一个实物,比如一部 iPhone X 手机,它就是对象.它的屏幕.内存等就是它的属性. 手机能够打电话,发短信,这个功能就是它的方法. 2. ...

  7. 第二弹!谷歌大脑2017总结下篇:Jeff Dean梳理6大领域研究

    李杉 维金 编译自 Google Blog 量子位 出品 | 公众号 QbitAI 传奇一般的Jeff Dean今天发布了谷歌大脑2017总结的第二弹. 在这篇总结中,Jeff Dean详细论述了谷歌 ...

  8. NandFlash驱动移植基础知识

    NandFlash驱动移植基础知识 文章借鉴博文:http://blog.csdn.net/leibniz_zsu/article/details/4977842 博文写的不错,谢谢分享 MTD 驱动 ...

  9. HDU - 1495 非常可乐

    大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...

最新文章

  1. python删除列表中的偶数_Python:从列表中删除奇数
  2. springboot启动后卡住 无日志的几种情况
  3. python实验八分支语句_python语句(分支,循环)
  4. TensorFlow | ReluGrad input is not finite. Tensor had NaN values
  5. opencv 实现图像形态学操作 膨胀和腐蚀 开闭运算 形态学梯度 顶帽和黑帽
  6. php提取pdf中的文字,如何提取pdf中的文字内容 如何从pdf中提取文字
  7. 使用python判断文件是否是excel格式
  8. 办公室购买计算机会计分录,购买办公用品属于什么会计科目
  9. 宁波银行成长的AB面:增长与合规不可兼得?管理漏洞不容忽视
  10. pitfall override private method
  11. c语言二级程序设计题难吗,c语言二级公共基础知识试题特点
  12. tplink查看上网记录_tp-link路由器如何查看连接人数 tp-link路由器查看连接人数方法【步骤】...
  13. Wex5 popOver组件的使用
  14. 年初五,迎财神 | 一张码如何实现多渠道(微信、支付宝、云闪付...)收款
  15. STM32的PDR_ON引脚,比较好的解释(转载+补充)
  16. Python利用单行热力图绘制好看的风向风速
  17. 单维度量表验证性因子分析_验证性因子分析CFA.ppt
  18. Kad算法模拟测试程序
  19. 多媒体触摸屏案例查询系统软件方案
  20. c++ vector删除多个元素方法

热门文章

  1. 清华姚班陈丹琦等27位华人学者获奖,斯隆奖2022年获奖名单颁布
  2. P2722 [USACO3.1]总分 Score Inflation
  3. 【Windows编程】实时捕捉屏幕
  4. java读取potx
  5. 高压开关柜中变送器和传感器有什么不同怎么区分
  6. 位移传递率matlab编程,各种谱计算,频响函数,传递率
  7. Java基于springboot开发的财务咨询系统代理记账系统有论文
  8. lbaas l7 policy
  9. VScode 搜索全局文件
  10. 系统之家安装windows虚拟机安装不成功原因及解决方法