zoukankan      html  css  js  c++  java
  • [Algorithm]暴力破解法-百钱买百鸡

    暴力破解法一般指穷举法。穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。

    用穷举法解题时,就是按照某种方式列举问题答案的过程。针对问题的数据类型而言,常用的列举方法一有如下三种:
    (1)顺序列举 是指答案范围内的各种情况很容易与自然数对应甚至就是自然数,可以按自然数的变化顺序去列举。
    (2)排列列举 有时答案的数据形式是一组数的排列,列举出所有答案所在范围内的排列,为排列列举。
    (3)组合列举 当答案的数据形式为一些元素的组合时,往往需要用组合列举。组合是无序的。
     
    例子如下:在公元五世纪我国数学家张丘建在其《算经》一书中提出了“百鸡问题 ”:
    “鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、母、雏各几何?”这个数学问题的数学方程可列出如下:
    Cock+Hen+Chick=100
    Cock*5+Hen*3+Chick/3=100
    显然这是个不定方程,适用于穷举法求解。依次取Cock值域中的一个值,然后求其他两个数,满足条件就是解。
     
    public class EnumerationAlgorithm {
        public static void main(String[] args) {
            //“鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1。百钱买百鸡,问鸡翁、母、雏各几何?”
            int total = 100;
            for(int Cock = 0; Cock <= total/5; Cock++)
            {
                for(int Hen = 0; Hen <= total/3; Hen++)
                {
                    for(int Chick = 0; Chick/3 <= total; Chick += 3)
                    {
                        if(Cock*5+Hen*3+Chick/3 == 100 && Cock+Hen+Chick == 100)
                        {
                            System.out.println("Cock: " + Cock + " Hen: " + Hen + " Chick: " + Chick);
                        }
                    }
                }
            }
        }
    }
  • 相关阅读:
    Win10导出查看删除已安装的证书
    Tomcat配置https访问
    SpringBoot启用https
    使用OpenSSL证书操作详解
    sed命令常用用法
    Jenkins安装第一个插件和通过离线安装包进行安装
    CentOS设置主机名称
    Jenkins使用过程中遇到的问题
    Visual Studio 最新插件
    文章去格式
  • 原文地址:https://www.cnblogs.com/limeina/p/6703842.html
Copyright © 2011-2022 走看看