<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>智力题 on 搁浅St的blog</title>
        <link>https://blog.huirongis.me/tags/%E6%99%BA%E5%8A%9B%E9%A2%98/</link>
        <description>Recent content in 智力题 on 搁浅St的blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Sun, 08 Nov 2026 16:13:21 +0000</lastBuildDate><atom:link href="https://blog.huirongis.me/tags/%E6%99%BA%E5%8A%9B%E9%A2%98/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>解决倒水问题</title>
        <link>https://blog.huirongis.me/post/how-to-solve-the-water-problem/</link>
        <pubDate>Sat, 19 Mar 2016 12:48:58 +0000</pubDate>
        
        <guid>https://blog.huirongis.me/post/how-to-solve-the-water-problem/</guid>
        <description>&lt;p&gt;有两个容器，容积分别为A升和B升，有无限多的水，现在需要C升水。
我们还有一个足够大的水缸，足够容纳C升水。起初它是空的，我们只能往水缸里倒入水，而不能倒出。
可以进行的操作是：
把一个容器灌满；
把一个容器清空（容器里剩余的水全部倒掉，或者倒入水缸）；
用一个容器的水倒入另外一个容器，直到倒出水的容器空或者倒入水的容器满。
问是否能够通过有限次操作，使得水缸最后恰好有C升水。&lt;/p&gt;
&lt;p&gt;这是很经典的智力题,各种倒水,求怎么倒.
网上有很多资料,我稍微总结下.&lt;/p&gt;
&lt;h1 id=&#34;1-是否有解&#34;&gt;1 是否有解
&lt;/h1&gt;&lt;p&gt;是的,不是任意的ABC值都是有解的,比如用4升和6升的容器,倒出5升水,这个方案就是无解的.
总结来说:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;倒水方案有解的,充要条件是:
C&amp;lt;=A+B并且
C能被A和B的最大公约数整除
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;比如上面的例子,4和6的公约数是2,5不能被2整除,所以是无解的.
具体证明过程请看文章后面的参考文献&lt;/p&gt;
&lt;h1 id=&#34;2-解法&#34;&gt;2 解法
&lt;/h1&gt;&lt;p&gt;有一个很简单的思路,在AB两个容器中,假设A&amp;lt;B,那么我们不停地用A往B中加水,溢出的时候,就把B清空,把A中多余部分导入B中.具体流程描述如下&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;A%B=x
2A%B=y
...
...
nA%B=z
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;知道最后余数z等于C,就停止
用一个具体的例子
&lt;code&gt;A=5&lt;/code&gt;,&lt;code&gt;B=9&lt;/code&gt;,&lt;code&gt;C=7&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;5%9=5
10%9=1
15%9=6
20%9=2
25%9=7
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;也就完成了查找
当然这个方法不是步数最少的解法&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.acmerblog.com/pour-water-problem-5615.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;倒水问题&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;欧几里得和扩展欧几里得算法&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;http://www.cnblogs.com/drizzlecrj/archive/2007/09/14/892340.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;最大公约数的三种解法&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
