鱼C论坛

 找回密码
 立即注册
查看: 1940|回复: 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
class 倒水():

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

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

    def 递归求值(self, 循环条件):
        print("容器A 容量:", self.a, "容器B 容量:", self.b)
        print("容器B 倒入 容器A")
        self.b = self.b - self.a_num + self.a
        self.a = self.b_num - self.b + self.a
        print("容器A 容量:", self.a, "容器B 容量:", self.b)
        if 循环条件 != self.b:
            print("清空 容器A")
            self.清空A()
            print("容器A 容量:", self.a, "容器B 容量:", self.b)
            self.a = self.b
            self.b = 0
            print("容器B 倒入 容器A")
            print("容器A 容量:", self.a, "容器B 容量:", self.b)
            self.满上B()
            print("容器B 满上")
            self.递归求值(循环条件)
        else:
            print("完成  容器B:", self.b)
            return 0

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

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


c = 倒水()
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 | 显示全部楼层
这样?
bottle_A = 6
bottle_B = 5
water = 3
count = 0

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

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 | 显示全部楼层    本楼为最佳答案   
class 倒水():

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

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

    def 递归求值(self, 循环条件):
        print("容器A 容量:", self.a, "容器B 容量:", self.b)
        print("容器B 倒入 容器A")
        self.b = self.b - self.a_num + self.a
        self.a = self.b_num - self.b + self.a
        print("容器A 容量:", self.a, "容器B 容量:", self.b)
        if 循环条件 != self.b:
            print("清空 容器A")
            self.清空A()
            print("容器A 容量:", self.a, "容器B 容量:", self.b)
            self.a = self.b
            self.b = 0
            print("容器B 倒入 容器A")
            print("容器A 容量:", self.a, "容器B 容量:", self.b)
            self.满上B()
            print("容器B 满上")
            self.递归求值(循环条件)
        else:
            print("完成  容器B:", self.b)
            return 0

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

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


c = 倒水()
c.递归求值(3)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 03:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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