读书人

[C异趣编程]波瓦松分酒趣题

发布时间: 2012-12-24 10:43:13 作者: rapoo

[C趣味编程]波瓦松分酒趣题

法国著名数学家波瓦松在青年时代研究过一个有趣的数学问题:假设某人有12品脱的啤酒一瓶,想从中倒出六品脱,但是恰巧身边没有6品脱的容器,仅有一个8品脱和一个5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?

?

解答:

?

这道题看了解题分析,没有看懂。。。待续

下面代码尚未完成后。

有个重要问题未解决:需要在递归的过程中,解决场景重复导致死循环的问题??

?

?

import com.sun.swing.internal.plaf.basic.resources.basic;public class FenJiu {    static int[] Capacity = { 20, 8, 5 }; // 3个杯子的容量    static int[] Litre    = { 12, 0, 0 }; // 3个杯子初始状态时水的升数    static int   X        = 6;           // 最终要形成6升    public static void main(String[] args) {        method();    }    private static void method() {        for (int e : Litre) {            if (e == X) {// 只要有x升水形成,就成功。                return;            }        }        dao(0, 1);        dao(0, 2);        dao(1, 0);        dao(1, 2);        dao(2, 0);        dao(2, 1);    }    /**     * M容量的杯子有水m升,N容量的杯子有水n升。<br>     * 从M容量的杯子往N容量的杯子倒水。<br>     * 要么m+n>N ,那么应该倒满N;<br>     * 要么m+n<N ,那么应该倒空M。     */    private static void dao(int i, int j) {        if (Litre[i] > 0 && Litre[j] < Capacity[j]) {            if (Litre[i] + Litre[j] > Capacity[j]) {                Litre[i] = Litre[i] + Litre[j] - Capacity[j];                Litre[j] = Capacity[j];            } else {                Litre[i] = 0;                Litre[j] = Litre[i] + Litre[j];            }        }    }}

读书人网 >编程

热点推荐