杯子倒水问题 -python
题目:假设有两个杯子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相关推荐
- 非常可乐(三个杯子倒水问题)
题目描述 红红是个肥宅,所以他很爱喝肥宅快乐水.但是每次当红红买了肥宅快乐水后,左左都要求和红红一起分享这一瓶可乐,而且要和红红喝得一样多.但是红红手中只有两个杯子,他们的容量的分别是 N 毫升 和 ...
- 杯子 + Kronican
杯子 Kronican [题目描述] 重庆八中在80周年校庆的时候获捐n个杯子, 每个杯子有两个属性:一个是已装水量 ai,一个是可装水量 bi(ai <= bi). 从一个杯子向另一个杯子倒 ...
- 七月刚入职的阿里测试开发岗-高频知识整理,内附面试题答案
本文是将自己在面试前找工作的部分笔记重新整理了下,不少内容当时是查阅的知乎.博客园.书籍等.我自己在牛客上也学习了很多面经和经验帖,收获了好几家大厂offer.最近整理出来这些,希望能对找测开岗的朋友 ...
- 动效引擎_汇众教育 | 高级引擎视效包装设计
伴随着5G和人工智能时代的到来,影视.动漫.游戏产业飞速发展.与此同时,虚幻引擎4 ( Unreal Engine 4,简称UE4)作为一套面向任何使用实时技术工作用户的完整开发工具,将为那些具备虚幻 ...
- c语言循环程序怎么编程,c语言程序(5):循环结构程序设计
#include #include #include /* 循环结构: 1.基本循环语句 while循环 do_while循环 for循环 1.1 所有的的循环,都是满足条件循环 1.2 while循 ...
- Java 面向对象编程的三大特性——封装、继承、多态
一.类和对象 1. 首先,什么是对象呢? 对象简单的来说就是一个实物,比如一部 iPhone X 手机,它就是对象.它的屏幕.内存等就是它的属性. 手机能够打电话,发短信,这个功能就是它的方法. 2. ...
- 第二弹!谷歌大脑2017总结下篇:Jeff Dean梳理6大领域研究
李杉 维金 编译自 Google Blog 量子位 出品 | 公众号 QbitAI 传奇一般的Jeff Dean今天发布了谷歌大脑2017总结的第二弹. 在这篇总结中,Jeff Dean详细论述了谷歌 ...
- NandFlash驱动移植基础知识
NandFlash驱动移植基础知识 文章借鉴博文:http://blog.csdn.net/leibniz_zsu/article/details/4977842 博文写的不错,谢谢分享 MTD 驱动 ...
- HDU - 1495 非常可乐
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但see ...
最新文章
- python删除列表中的偶数_Python:从列表中删除奇数
- springboot启动后卡住 无日志的几种情况
- python实验八分支语句_python语句(分支,循环)
- TensorFlow | ReluGrad input is not finite. Tensor had NaN values
- opencv 实现图像形态学操作 膨胀和腐蚀 开闭运算 形态学梯度 顶帽和黑帽
- php提取pdf中的文字,如何提取pdf中的文字内容 如何从pdf中提取文字
- 使用python判断文件是否是excel格式
- 办公室购买计算机会计分录,购买办公用品属于什么会计科目
- 宁波银行成长的AB面:增长与合规不可兼得?管理漏洞不容忽视
- pitfall override private method
- c语言二级程序设计题难吗,c语言二级公共基础知识试题特点
- tplink查看上网记录_tp-link路由器如何查看连接人数 tp-link路由器查看连接人数方法【步骤】...
- Wex5 popOver组件的使用
- 年初五,迎财神 | 一张码如何实现多渠道(微信、支付宝、云闪付...)收款
- STM32的PDR_ON引脚,比较好的解释(转载+补充)
- Python利用单行热力图绘制好看的风向风速
- 单维度量表验证性因子分析_验证性因子分析CFA.ppt
- Kad算法模拟测试程序
- 多媒体触摸屏案例查询系统软件方案
- c++ vector删除多个元素方法