每日一题.每日一练 .6.水壶问题(写完感觉自己能去讲课版)

这篇博客探讨了如何通过两个不同容量的水壶得到特定量的水,引入了贝祖定理并分析了解决此类问题的逻辑。博主通过实例解释了如何判断是否有解,并分享了利用Python实现的解决方案,尽管过程中遇到了理解难题,但最终成功解决了问题。
摘要由CSDN通过智能技术生成

有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?

如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。

你允许:

装满任意一个水壶 清空任意一个水壶 从一个水壶向另外一个水壶倒水,直到装满或者倒空 (From the famous “Die
Hard” example)

示例 1:
输入: x = 3, y = 5, z = 4
输出:
True

示例 2:
输入: x = 2, y = 6, z = 5
输出:
False

这不是五分钟能解决的了==,花了一小时看贝祖定理没看明白,数学好菜
首先先给一个贝祖定理的结论
当存在ax+by=z时,当且仅当x,y的最大公约数是z的倍数时有解(看了一小时也没看明白贝祖定理的证明==)

对于水壶问题我们可以这样认为,每次操作过后,水壶的总量的水只是增加x,减少x或者增加y ,减少y,如果你把部分水倒掉或将部分水填满,比如x桶 2升,y桶0升,如果我们对x桶进行操作,有两种可能:
倒满,那么就和把一个空的x桶倒满是一样的结果
倒空,那么就和最开始的x什么都不动是一样的结果

这里可能有点绕,我们尝试简述一下。

我们先引入两个变量y_now和x_now,这两个变量代表某一时刻x,y两瓶里剩余的水量。

首先我们的目的是获得x_now+y_now=z(x_now和y_now都可以为0),也就是说我们在某一时刻发现两瓶水的总量是z,那么问题就解决了。而总量出现部分水(即当前总量并不是x,y,x+y,零,下文同)的情况满足以下几个条件

1:当出现了部分水的情况时,至少有一个瓶子存在着不满不空的状态(全满,全空,一满一空都不符合部分水的前提)

2:不发生任何瓶子转移的情况,不会出现部分水(永远不往另一个瓶子里倒,只有满或者空)

3:两个瓶子不会同时出现不满不空的情况࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值