百钱买百鸡屁股经典算法题

古代老头出的题:张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

意思是:鸡公五块钱 一个 ,母鸡三块钱 一个 , 小鸡一块钱 个;问:我100块钱 我可以买公鸡母鸡小鸡各多少个?

思路:设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:

5x+3y+z/3=100

x+y+z=100

那么久要用到三层循环嵌套了,打印条件为:

if( ((5*x) + (3*y) + z/3  == 100) && (x + y + z) == 100)

但这里有个小bug  因为 z/3 算出来是整数 所以 会出错.....

那么我们就可以使用控制变量法 把各个变量提升三个档次 那么我们就算出来了 即打印条件为:

if( ((15*x) + (9*y) + z  == 300) && (x + y + z) == 100)
那么 我们就解出来这个题了。注意看注释就好了 这题很经典 希望能找到逻辑点!
import java.util.*;
public class Main{
    public static void main(String[] args) {
        //Scanner sc = new Scanner(System.in);
        for(int x = 0;x<=20;x++)    //设x为公鸡 他最多能买20个
        {
            for(int y = 0;y<=33;y++) //设y为母鸡 他最多能买33个
            {
                for(int z = 0;z<=100;z++)//设z为母鸡 他最多能买100个
                {
                    if( ((15*x) + (9*y) + z  == 300) && (x + y + z) == 100) //利用控制变量法把z/3这个小BUG解决掉(增大三倍);
                        System.out.printf("cock=%d,hen=%d,chicken=%d\n",x,y,z);//输出各个买的情况
                }

            }
        }

    }
}
 

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14110951.html

原文地址:https://www.cnblogs.com/bi-hu/p/14110951.html