java 鸡兔同笼问题,穷举算法解决鸡兔同笼数学问题 鸡兔同笼java求解 算法示例,穷举算法示例

1. 穷举算法基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下:

   1) 对于一种可能的情况,计算其结果。
   2) 判断结果是否满足要求,如果不满足则执行第(1)步来搜索下一个可能的情况;

   如果满足要求,则表示寻找到一个正确的答案。在使用穷举算法时,需要明确问题的答案的范围,这样才可以在指定范围内搜索答案。指定范围之后,就可以使用循环语句和条件判断语句逐步验证候选答案的正确性,从而得到需要的正确答案。

2. 实例

   鸡免同笼问题最早记载于 1500 年前的《孙子算经》,这是我国古代一个非常有名的问题。鸡免同宠的原文如下:
                        今有鸡免同笼,上有三十五头,下有九十四足,问鸡兔各几何?这个问题的大致意思是:在一个笼子里关着若干只鸡和若干只兔,从上面数共有 35 个头从下面数共有 94 只脚。问笼中鸡和兔的数量各是多少?

3. 双重for循环计算:

    public static void main(String[] args) {
        qiongJu(35, 94);
    }

    public static void qiongJu(int head, int foot) {
        int rabbit = 0;
        int chicken = 0;

        while (true) {
            if (rabbit > head) {
                break;
            }
            for (; ; ) {
                if (chicken > head) {
                    chicken = 0;
                    break;
                }
                if ((rabbit * 4 + chicken * 2) == foot && (rabbit + chicken) == head) {
                    System.out.println("rabbit:" + rabbit + ", chicken:" + chicken);
                    return;
                }
                chicken++;
            }
            rabbit++;
        }
        throw new IllegalArgumentException("计算错误,请重新输入!");
    }

4. 一层循环搞定code  (妙啊!非常精简):

public static void qiongJu(int head, int foot) {
        // i 为兔子,c chicken
        for (int i = 0; i < head; i++) {
            int c = (head - i);
            if (i * 4 + c * 2 == foot) {
                System.out.println("rabbit:" + i + ", chicken:" + c);
            }
        }
    }

 6. 总结:一层循环搞定,使用的时间消耗代码复杂度都比两层循环大大降低

你可能感兴趣的:(数据结构与算法,java,算法)