• 两个容积互质的水杯可倒出任意从1到容积和的水量


    即: 两个水杯A、B,容积分别为 x 和 y ,(x,y)=1。则可以通过相互倒水的方法倒出从1到(x+y)的任意自然数体积的水来。(假设睡无限)

    例: x=5,y=3,倒出4升水。

    1. A倒满,B空: A剩5,B剩0
    2. A的水倒满B: A剩2,B剩3
    3. B倒空,A水倒至B:  A剩0,B剩2
    4. A倒满: A剩5,B剩2
    5. A的水倒满B:A剩4,B剩3   

    数学证明:(转自:http://www.guokr.com/question/206848/)

    第一种情况:水是无限量供应的。

    假设现在有这样两个杯子,容积分别是x和y并且互质,那么对于任何整数a和b,下面的同余方程:(用==表示同余的符号)

    z == a (mod x)
    z == b (mod y)

    都有解,这个结论叫做中国剩余定理,而且它的证明是个构造性证明,也就是说证明本身给出了一个解这个方程的办法。

    现在假设x > y,a是需要的水的体积,令b = 0,解这个方程可以得到一个整数z。z除以y余数为0,所以只要用小杯装z/y杯水,然后向大杯中倒,大杯满了就全倒光再接着从小杯中续水,直到把z升水全部用完,大杯中剩下的就是a升水。

    也就是说这类问题总是有解的,但是这个解可能不是最优的(用水最少或者折腾次数最少)。

    第二种情况:水是有限的,比如大杯中一开始有x升,小杯中一开始有y升。

    在这种情况下肯定需要第三个容器,如果这个容器足够大的话应该和第一种情况一样。

    如果第三个容器比较小的话,那就需要更多的讨论了(比小杯还小、比小杯大比大杯小等等)。

  • 相关阅读:
    idea最新注册码
    pycharm中可以运行脚本(只在控制台运行,Debugger不运行,设置的断点没用)但是不能debug脚本
    VSCode 云同步扩展设置 Settings Sync 插件
    gist.github.com 无法访问解决办法,亲测永远有效!
    C# HttpWebRequest httpclient
    C# 图片处理
    powerdesigner逆向工程生成PDM时的列注释
    Ocelot网关治理
    Consul服务注册与发现
    CentOS 使用DVD1_DVD2作为本地离线的更新源
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2964350.html
Copyright © 2020-2023  润新知