Java基础------百元买百鸡问题

Posted nancyzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础------百元买百鸡问题相关的知识,希望对你有一定的参考价值。

问题描述: 公鸡每只3元,母鸡每只5元,小鸡三只一元,问100元买100只鸡有几种买法?

public static void main(String[] args) {  
        int count=0;     //用count纪录总方案数
         //假设 i 表示买母鸡的个数,j 表示买公鸡的个数,k 表示买小鸡的个数
        for(int i=0;i<=100/5;i++){   
            for(int j=0;j<=100/3;j++){  
                for(int k=0;k<=100;k+=3){ //此处保证了小鸡的个数是3的倍数。只有这样花的钱才能是整数,而不是小数 
                    if(i+j+k==num &&  i*5+j*3+k/3==money){  
                        count++;
                        System.out.println("第"+count +"种方案:母鸡数:" + i + ",公鸡数:" + j + ",小鸡数:" + k );
                    }
                }
            }
        }
        System.out.println("一共" + count + "种买法!");
    }

 

 

此处扩展为花money的钱买num只鸡的买法!!!

public static void main(String[] args) {  
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入您想买的总鸡数(整数):");
        int num=scan.nextInt();
        System.out.println("请输入您想要花多少钱买这些鸡(整数):");
        int money=scan.nextInt();


        int count=0;     //用count纪录总方案数
         //假设 i 表示买母鸡的个数,j 表示买公鸡的个数,k 表示买小鸡的个数
        for(int i=0;i<=money/5;i++){      //i表示母鸡数,假设所有的money都买母鸡,则最多能买money/5个;所以i的取值范围为0-money/5
            for(int j=0;j<=money/3;j++){    //j表示公鸡数,假设所有的money都买公鸡,则最多能买money/3个;所以j的取值范围为0-money/3
                for(int k=0;k<=money*3;k+=3){     //k表示小鸡数,假设所有的money都买小鸡,则最多能买money*3个,所以k的取值范围为0-money*3
                    if(i+j+k==num && i*5+j*3+k/3==money){   //注意:小鸡的个数必须为3个倍数才能保证花的钱是整数,而没有小数的情况。
                        count++;
                        System.out.println("第"+count +"种方案:母鸡数:" + i + ",公鸡数:" + j + ",小鸡数:" + k );
                    }
                }
            }
        }
        System.out.println("一共" + count + "种买法!"); 
    }

 

 

注意:

此段代码(代码段1):

     for(int k=0;k<=money*3;k+=3){ 
          if(i+j+k==num && i*5+j*3+k/3==money){   

等价于(代码段2):

     for(int k=0;k<=money*3;k++){ 
          if(i+j+k==num  &&  k%3==0 && i*5+j*3+k/3==money){ 

 

只是代码段1的效率要比代码段2要高,所以推荐使用代码段1。

 




































以上是关于Java基础------百元买百鸡问题的主要内容,如果未能解决你的问题,请参考以下文章

算法之百元买百鸡

16.百元买百鸡

java 暴力破解 百钱买百鸡

华为机试题 HJ72百钱买百鸡问题

华为机试题 HJ72百钱买百鸡问题

java算法之百钱买百鸡问题