算法初级_Question1_百鸡百钱问题(java实现)

这篇文章讲述的是算法初级部分的百鸡百钱问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

百鸡百钱,假设一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用一百钱买一百只鸡,请问公鸡、母鸡、小鸡各多少只。

算法分析

假设公鸡cock只,母鸡hen只,则小鸡chicken只
可得出方程
1. cock + hen + chicken = 100
2. cock*5 + hen*3 + chicken/3 ;
若100钱全买公鸡,则能买33只,故公鸡cock的取值范围为0-20,
同理hen的取值范围为0-33,小鸡的取值范围为0-100。

代码实现

public class Q1_Chicken {
    /**
     * 问题描述:百鸡百钱,假设一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用一百钱买一百只鸡
     *        请问公鸡、母鸡、小鸡各多少只。
     * 
     * 算法思想:假设公鸡cock只,母鸡hen只,则小鸡chicken只
     *           可得出方程 1. cock + hen + chicken = 100 
     *                    2. cock*5 + hen*3 + chicken/3 ;
     *           若100钱全买公鸡,则能买33只,故公鸡cock的取值范围为0-20,
     *           同理hen的取值范围为0-33,小鸡的取值范围为0-100
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //穷举法:算法效率O(N*N*N)
        int cock , hen , chicken ;
        for(cock=0 ;cock <=20 ; cock++ )
            for(hen=0 ; hen<=33 ; hen++ )
                for(chicken=0 ; chicken<=100 ;chicken++){
                    if((cock + hen + chicken == 100) && (cock*5 + hen*3 + chicken/3.0 == 100)) //注意是除以3.0
                        System.out.println("公鸡:" + cock + "只,母鸡:" + chicken + "只,小鸡:" + chicken + "只");
                }

        //改进代码:算法效率O(N*N)
        for(cock=0 ;cock <=20 ; cock++ )
            for(hen=0 ; hen<=33 ; hen++ )
            {
                chicken = 100 - cock - hen ;
                if((cock + hen + chicken == 100) && (cock*5 + hen*3 + chicken/3.0 == 100)) //注意是除以3.0
                    System.out.println("公鸡:" + cock + "只,母鸡:" + chicken + "只,小鸡:" + chicken + "只");
            }

    }

}

样例输出

公鸡:0只,母鸡:75只,小鸡:75只
公鸡:4只,母鸡:78只,小鸡:78只
公鸡:8只,母鸡:81只,小鸡:81只
公鸡:12只,母鸡:84只,小鸡:84只

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/80813148