鱼C论坛

 找回密码
 立即注册
查看: 1630|回复: 8

[已解决]python倒水问题

[复制链接]
发表于 2022-2-27 17:06:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:有两个杯子,一个5L,一个6L,想办法倒出3L水
解决:
1、先把6L杯子装满,然后倒入5L的水杯,则6l中还剩1L
2、把5升水倒掉,然后把1l水倒入
3、重复以上步骤,把6L水装满,倒入5L水杯,此时5L水杯已有1L水,所以只能倒4L水过来 ,则6L水杯里还剩2L
4、再把5L水杯水倒掉,把6L水杯中2L水倒入5L水杯
5、把6l水装满,倒入5l水杯,此时5l水杯已有2L水,所以只能倒3L水过来 ,则6L水杯里还剩3L
最佳答案
2022-2-28 14:49:51
  1. class 倒水():

  2.     def __init__(self):
  3.         self.a = 0
  4.         self.b = 6
  5.         self.a_num = 5
  6.         self.b_num = 6

  7.     def 满上B(self):
  8.         self.b = 6

  9.     def 递归求值(self, 循环条件):
  10.         print("容器A 容量:", self.a, "容器B 容量:", self.b)
  11.         print("容器B 倒入 容器A")
  12.         self.b = self.b - self.a_num + self.a
  13.         self.a = self.b_num - self.b + self.a
  14.         print("容器A 容量:", self.a, "容器B 容量:", self.b)
  15.         if 循环条件 != self.b:
  16.             print("清空 容器A")
  17.             self.清空A()
  18.             print("容器A 容量:", self.a, "容器B 容量:", self.b)
  19.             self.a = self.b
  20.             self.b = 0
  21.             print("容器B 倒入 容器A")
  22.             print("容器A 容量:", self.a, "容器B 容量:", self.b)
  23.             self.满上B()
  24.             print("容器B 满上")
  25.             self.递归求值(循环条件)
  26.         else:
  27.             print("完成  容器B:", self.b)
  28.             return 0

  29.     def 清空A(self):
  30.         self.a = 0

  31.     def 清空B(self):
  32.         self.b = 0


  33. c = 倒水()
  34. c.递归求值(3)

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-27 17:09:48 | 显示全部楼层
这好像不是 Python 问题,好像只是个逻辑思考问题(IQ 测试题?)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-27 17:22:59 | 显示全部楼层
傻眼貓咪 发表于 2022-2-27 17:09
这好像不是 Python 问题,好像只是个逻辑思考问题(IQ 测试题?)

要用python写出逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-27 18:04:34 | 显示全部楼层
这样?
  1. bottle_A = 6
  2. bottle_B = 5
  3. water = 3
  4. count = 0

  5. while bottle_B != water:
  6.     bottle_B = (bottle_B + bottle_A)%5
  7.     count += 1

  8. print(count) # 重复做的次数
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-27 19:49:38 | 显示全部楼层

应该不是这样的,不过谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-28 08:12:31 From FishC Mobile | 显示全部楼层
这跟汉诺塔不是一样的么,递归就解决了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-28 09:32:09 | 显示全部楼层
我研究研究,写好代码就回复你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-28 14:49:51 | 显示全部楼层    本楼为最佳答案   
  1. class 倒水():

  2.     def __init__(self):
  3.         self.a = 0
  4.         self.b = 6
  5.         self.a_num = 5
  6.         self.b_num = 6

  7.     def 满上B(self):
  8.         self.b = 6

  9.     def 递归求值(self, 循环条件):
  10.         print("容器A 容量:", self.a, "容器B 容量:", self.b)
  11.         print("容器B 倒入 容器A")
  12.         self.b = self.b - self.a_num + self.a
  13.         self.a = self.b_num - self.b + self.a
  14.         print("容器A 容量:", self.a, "容器B 容量:", self.b)
  15.         if 循环条件 != self.b:
  16.             print("清空 容器A")
  17.             self.清空A()
  18.             print("容器A 容量:", self.a, "容器B 容量:", self.b)
  19.             self.a = self.b
  20.             self.b = 0
  21.             print("容器B 倒入 容器A")
  22.             print("容器A 容量:", self.a, "容器B 容量:", self.b)
  23.             self.满上B()
  24.             print("容器B 满上")
  25.             self.递归求值(循环条件)
  26.         else:
  27.             print("完成  容器B:", self.b)
  28.             return 0

  29.     def 清空A(self):
  30.         self.a = 0

  31.     def 清空B(self):
  32.         self.b = 0


  33. c = 倒水()
  34. c.递归求值(3)

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-28 18:33:14 | 显示全部楼层
需要求解过程,还是只需要确定结果,例如返回True or False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-6 03:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表