zoukankan      html  css  js  c++  java
  • 百钱买百鸡屁股经典算法题

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

    意思是:鸡公五块钱 一个 ,母鸡三块钱 一个 , 小鸡一块钱 个;问:我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

  • 相关阅读:
    VUE组件——FlameGraph火焰图
    Linux操作之——配置samba
    Javascript基础——图片预加载
    Javascript基础——浮点数操作
    js页面实时显示时间
    基于Struts2+Hibernate的朋友圈留言网站开发的质量属性
    框架选择
    软件体系架构
    《需求分析与系统设计》第三篇
    《需求分析与系统设计》阅读笔记第二篇
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14110951.html
Copyright © 2011-2022 走看看