百錢買百雞問題


百錢買百雞問題

題目:公元前5世紀末,中國古代數學家張丘建在他的《算經》中提出了著名的 “百錢買百雞問題”:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?即一百個銅錢買了一百只雞,其中公雞一只5錢、母雞一只3錢,雛雞一錢3只,問一百只雞中公雞、母雞、雛雞各多少?

三種解法

O(n)

思路:利用高中的參數方程求解

 /**
     * x + y + z = 100
     * 5 * x + 3 * y + z / 3 =100
     * 引用參數t來表示 x、y、z得:
     *
     * x = ( 4 * t - 300 ) / 3 ①
     * y = ( 600 - 7 * t ) / 3 ②
     * z = t ③
     *
     * 有①②得:
     * 4 * t >= 300 ④
     * 600 - 7 * t >= 0 ⑤
     *
     * ④⑤可得
     * 75 =< t <86
     */
    public static void way1(){      //O(n)
        //公雞數量:x 母雞數量:y 雛雞數量:z
        int x,y,z;
        //先確定雛雞數量范圍 然后反確定公雞母雞數量
        for (int t = 75; t < 86 ; t++){
            x = ( 4 * t - 300 ) / 3;
            y = ( 600 - 7 * t ) / 3;
            z = t;
            //輸出符合題目中兩個公式的x、y、z
            if ((5 * x + 3 * y + z / 3 == 100) && (x + y + z == 100)){
                System.out.println("公雞:"+x+" 母雞:"+y+" 雛雞:"+z);
            }
        }
    }

O(n**2)

思路:確定公雞和母雞,然后用體中的兩個公式代換

public static void way2(){      //O(n**2)
    //公雞數量:x 母雞數量:y 雛雞數量:z
    int x,y,z;
    //公雞最多買20只
    for (x=0;x<=20;x++){
        //母雞最多買33只
        for(y=0;y<=33;y++){
            //雛雞和公雞母雞關系
            z=100-x-y;
            //雛雞數量一定是三的倍數,且三種雞一共百錢
            if (5*x+3*y+z/3==100 && z%3==0){
                System.out.println("公雞:"+x+" 母雞:"+y+" 雛雞:"+z);
            }
        }
    }
}

O(n**3)

思路:公雞母雞雛雞都全循環一遍

public static void way3(){      //O(n**3)
        //公雞數量:x 母雞數量:y 雛雞數量:z
        int x, y, z;
        //公雞最多買20只
        for (x = 0; x < 20; x++) {
            //母雞最多買33只
            for (y = 0; y < 33; y++) {
                //雛雞最多買300只
                for (z = 3; z < 300; z = z + 3) {
                    //找到符合這兩個公式的x、y、z
                    if ((5 * x + 3 * y + z / 3 == 100) && (x + y + z == 100)) {
                        System.out.println("公雞數:" + x + "母雞數" + y + "小雞數" + z);
                    }
                }
            }
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM