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。

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

时间: 2025-01-11 16:47:09

Java基础------百元买百鸡问题的相关文章

基础算法题-----百元买百鸡

基础算法题-–百元买百鸡 题目:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 首先来分析一下: 设公鸡为x只,母鸡为y只,小鸡为z只,可的 x+y+z=100 5x+3y+z/3=100 由于每种鸡最少1只,所以公鸡最多能有(100 - 3 - 1) / 5只,母鸡最多能有(100 - 5 - 1) / 3只 至此我们便可以编码实现了 // 买公鸡最大数量 int gongJI = (10

算法之百元买百鸡

<算经> 书中提出的数学问题: 鸡翁一值钱五, 鸡母一值钱三, 鸡雏三值钱一. 百钱买百鸡, 问鸡翁.鸡母.鸡雏各几何? 1 /** 2 现在有100 元 , 买 100只鸡 3 公鸡 5 元每只 4 母鸡 3 元每只 5 小鸡 3只 1 元 6 x+y+z = 100 7 5*x+3*y+z/3=100 8 */ 9 10 11 12 #include<stdio.h> 13 14 void getResult(){ 15 int x,y,z; 16 for(int x=0;x&

百元买百鸡(C++实现)

#include<iostream> using namespace std; void main(void) { int a,b,c; //char DD,EE,FF; for (a=1;a<=20;a++) for (b=1;b<=33;b++) for (c=3;c<=99;c++) if (5*a+3*b+c/3==100) if (a+b+c==100) if (c%3==0) { //printf(a); std::cout<<"公鸡数为:&

2017-9-16C#笔记(枚举算法,百元买鸡)

枚举算法: 百元买鸡 枚举算法的ì例子:问题如下:某3人有100元打算买100只鸡,其中公鸡为5元每只,母鸡为3元每只,小?鸡为3只1块钱,问可以买多少只公鸡,母鸡,小鸡? int x, y, z; for (x = 0; x <= 20; x++) for (y = 0; y <= 33; y++) for (z = 0; z <= 100; z++) if ((x + y + z == 100) && (5 * x + y * 3 + z / 3 == 100) &a

Java实现百钱买百鸡

1.问题描述 今有鸡翁一,值钱伍:鸡母一,值钱三:鸡鶵三,值钱一.凡百钱买鸡百只,问鸡翁.母.鶵各几何?答曰:鸡翁四,值钱二十:鸡母十八,值钱五十四:鸡鶵七十八,值钱二十六.又答:鸡翁八,值钱四十:鸡 母十一,值钱三十三,鸡鶵八十一,值钱二十七.又答:鸡翁十二,值钱六十:鸡母四.值钱十二:鸡鶵八十 四,值钱二十八." 2.实现源码 /** * @Title:HundredHen.java * @Package:com.you.hen * @Description:百钱买百鸡 * @author:

百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果!

/** * 百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,问100元买100只鸡,问有多少种买法,输出每种买法的结果! * */ public class Test3 { public static void main(String[] args) { int c = 0; for (int a = 0; a < 100; a++) { for (int b = 0; b < 100; b++) { if ((7 * a + 4 * b) == 100) { c++; System.o

华为OJ平台——百钱买百鸡问题

题目描述: 元前五世纪,我国古代数学家张丘建在<算经>一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一. 百钱买百鸡,问鸡翁.鸡母.鸡雏各几何? 思路: 这道题很简单,假设鸡翁 i 只, 鸡母 j 只, 则有 i + j + k = 100 5*i + 3*j + k/3 = 100 由以上两个等式我们可以推出: j = 25 - i * 7/4 ; k = 75 + i * 3/4 ; 由于i. j. k 必须是0或正整数,所以 i 必须是4的倍数,因此我们下面的程序中也是

3. 百钱买白鸡问题

这是一个古老而非常经典的问题,最早源自中国古代的算经,中国古代数学家张丘建在他的算经中提出了著名的百钱买白鸡的问题: 鸡翁1, 值钱5,鸡母1,值钱3,鸡雏3值钱1,百钱买白鸡,问翁,母,雏各几何? 100文钱买100只鸡,公鸡5文钱一只,母鸡3文一只,小鸡3只1文钱:100文钱买了100只鸡,请问公鸡,母鸡,小鸡各有多少? #include <stdio.h> #include <stdlib.h> int main() {     int i,j,k;     for(i=0;

百钱买百鸡

public class Sample1//百钱买百鸡/*鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一.百钱买百鸡,问鸡翁.鸡母.鸡雏各几何?*/{ public static void main(String [] args){ int x;//可买鸡翁只数 int y;//可买鸡母只数 int z;//可买鸡雏只数 for ( x=0;x<=100/5 ;x++ ) { for ( y=0;y<=33 ;y++ ) { z=100-x-y; if (x*5+y*3+z/3==100&am