码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-30 20:26:29      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:小数   bsp   for   stat   public   表示   tin   pos   scan   

问题描述: 公鸡每只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基础------百元买百鸡问题

标签:小数   bsp   for   stat   public   表示   tin   pos   scan   

原文地址:https://www.cnblogs.com/nancyzhang/p/8150964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!