蛮力法(brute force methord,也称穷举法或者枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述。所以,蛮力法也是最容易应用的方法。

蛮力法所依赖的基本技术是遍历(traversal,也称扫描),即采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解。依次处理所有元素是蛮力法的关键,为了避免陷入重复试探,应保证处理过的元素不再被处理。用蛮力法设计的算法,一般来说,都可以对算法的第一个版本进行一定程度的改进,提高其时间性能,但只能减少系数,而数量级不会改变。
        由于蛮力法需要依次穷举待处理的元素,因此,用蛮力法设计的算法其时间性能往往也是最低的,典型的指数时间算法一般都是采用蛮力穷举。但是,基于以下原因,蛮力法也是一种重要的算法设计技术:

(1)理论上,蛮力法可以解决可计算领域的各种问题。对于一些非常基本的问题,例如,求一个序列中的最大元素,计算n个数的和等,蛮力法是一种常用的算法设计技术。
(2)蛮力法经常用来解决一些较小规模的问题。如果要解决问题的输入规模不大,用蛮力法设计的算法其时间是可以接受的,此时,设计一个更高效算法的代价是不值得的。
(3)对于一些重要的问题(例如排序、查找、串匹配),蛮力法可以设计一些合理的算法,这些算法具有实用价值,而且不受输入规模的限制。
(4)蛮力法可以作为某类问题时间性能的下界,来衡量同样问题的其他算法是否具有更高的效率。

应用实例——百元买百鸡问题

【问题】已知总金额为100元,公鸡5元一只,母鸡3元一只,小鸡1元三只,一共需要买100只鸡,求解公鸡、母鸡、小鸡各多少只?

【想法】设公鸡、母鸡和小鸡的个数分别为x、y和z,则有以下方程组成立:

则百元买百鸡问题转换为求方程组的解。应用蛮力法求方程组的解只能依赖试探变量x、y和z的值,验证x、y和z的某个特定值是否能够使方程组成立。

【算法】设公鸡、母鸡和小鸡的个数分别为x、y和z,注意到方程组可能有多个解,需要输出所有满足条件的解,设变量count表示解的个数,算法用伪代码描述如下:

输入:无

输出:公鸡、母鸡和小鸡的个数

1. 初始化解的个数count=0;

2. 循环变量x从0~20重复执行下述操作:

2.1 循环变量y从0~33重复执行下述操作:

2.1.1 z=100-x-y;

2.1.2 如果5x+3y+z/3=100,则count++;输出x、y和z的值;

2.1.3 y++;

2.2 x++;

3. 如果count=0,则输出无解信息;

【算法分析】算法由两层循环嵌套组成,基本语句为5x+3y+z/3=100,所以操作执行次数为21X34=714.

【算法实现】

C语言代码如下:

#include<stdio.h>int main()
{int x, y, z;                                   //x、y和z表示 公鸡、母鸡和小鸡的个数                                        int count = 0;                                    //解的个数初始化为0for (x = 0; x < 20; x++)                       //公鸡个数的范围是0到20{for (y = 1; y <= 33; y++)                 //母鸡个数的范围是0到33{z = 100 - x - y;                        //满足条件x+y+z=100if ((z % 3 == 0) && (5 * x + 3 * y + z / 3 == 100)) //满足条件总价为100元,且小鸡的个数应该是3的倍数{count++;                           //问题解的个数加一printf("公鸡有%d只,母鸡有%d只,小鸡有%d只\n",x , y, z);    //输出所有解}}}if (count == 0)                                 //无解的情况printf("问题无解");}

输出结果:

//公鸡有0只,母鸡有25只,小鸡有75只
//公鸡有4只,母鸡有18只,小鸡有78只
//公鸡有8只,母鸡有11只,小鸡有81只
//公鸡有12只,母鸡有4只,小鸡有84只

参考书籍:《算法设计与分析》(第2版)

蛮力法求解百元买百鸡问题相关推荐

  1. 题目95:百鸡问题:一只公鸡值5元,一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡。现有n元钱,想买n只鸡。问有多少种买法?(钱要用完)

    题目转载:http://python.wzms.com/s/1/85 题目描述: 百鸡问题:一只公鸡值5元, 一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡. 现有n元钱,想买n只鸡. 问有多少种买 ...

  2. 题目54:百钱百鸡 一只公鸡值5元,一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡。现有n元钱,想买n只鸡。问有多少种买法?(钱要用完)

    题目转载:http://python.wzms.com/s/1/50 题目描述: 百鸡问题:一只公鸡值5元, 一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡. 现有n元钱,想买n只鸡. 问有多少种买 ...

  3. C语言 穷举法 百元买百鸡问题。

    穷举法,百元买百鸡问题 中国古代数学家张丘建在他的<算经>中提出了一个著名的"百元买百鸡"的问题 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百元买百鸡,问翁,母, ...

  4. 枚举法解决百元买百鸡问题及性能优化

    枚举法解决百元买百鸡问题 枚举法解决百元买白鸡问题 基本思想:枚举法又称穷举法,它是根据题意枚举所有有可能的状态,并用问题给定的条件约束状态,检验哪些是需要的,哪些是不需要的. 枚举法的优缺点:优点: ...

  5. 【JavaScript】用循环语句解决鸡兔同笼和百元买百鸡问题

    js循环语句解决鸡兔同笼问题和百元买百鸡问题 文章目录 一.鸡兔同笼问题 1.分析 2.两种解决办法 方法1 方法2 二.百元买百鸡问题 1.分析 2.解决方法 方法1 方法2 总结 一.鸡兔同笼问题 ...

  6. for循环,解决百元买百鸡,详细过程步骤

    题目:通过for循环实现百钱买百鸡的问题:             公鸡5元每只,母鸡3元每只,小鸡3只1元,100元买一百只鸡多少种办法? JS代码: var ways=0;for(var i = ...

  7. python百钱买百鸡代码_PythonStudy_‘百元买百鸡’代码

    题:今有鸡翁一,值钱伍:鸡母一,值钱三:鸡鶵三,值钱一. 问:凡百钱买鸡百只,问鸡翁.母.鶵各几何? 解:x+y+z=100;5x+3y+z/3=100 代码实现: 1.使用while嵌套循环.注意变 ...

  8. Python实现经典题:百元买百鸡

    百元买百鸡问题."百元买百鸡"是我国古代数学家张丘建在<算经>一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一.百钱买百鸡,问鸡翁.鸡母.鸡雏各几何?用现 ...

  9. Python百元买百鸡、老王买鸡

    Python语言基础(百元买百鸡) 需求分析 """ 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单: 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, 用 ...

最新文章

  1. 养成好的生活和学习习惯
  2. 学习Docker容器网络模型 - 搭建分布式Zookeeper集群
  3. JAVA_Java常用核心包(概念)
  4. myeclipse如何修改tomcat的timeout
  5. 2017年我国SAP行业三大利好
  6. AgileConfig - 轻量级配置中心1.2.0发布,全新的UI
  7. Esri Maps For Office制作漂亮的地图
  8. iterm2 保存阿里云登陆并防止断开连接
  9. 今天的这可是有原因的飞鸽传书
  10. Python绘图,圣诞树,花,爱心 | Turtle篇
  11. SONiC项目的发展及其介绍
  12. 循环队列和链队的表示和实现
  13. CMM3上的集成软件管理
  14. android模拟奥克斯空调红外,奥克斯空调手机遥控器
  15. 揭秘强开微粒贷骗局 看完你就明白了
  16. java for循环打印平行四边形,正三角形,菱形和空心菱形
  17. 浅谈使用KMeans进行性别与年龄的聚类分析
  18. 2021-05-18
  19. 前大灯是近光灯还是远光灯_前照灯和近光灯一样吗?前照灯就是近光灯吗
  20. Android实现百度地图定位(墨雪亲测)

热门文章

  1. pbe近似_pbe近似_科学网—[转载]赝势及泛函介绍(1) - 冯宇超的博文
  2. spring项目中使用slf4j和log4j2日志框架
  3. Java8 Zip 压缩与解压缩
  4. es统计高亮命中次数
  5. 对话驴评网CEO崔继蓉:在线旅游的前途在移动端
  6. 对激光原理的初步了解
  7. win10计算机左边栏,教你把win10任务栏透明设置
  8. 抛弃Eclipse!
  9. 2022强大的修复版趣味心理测试小程序源码,趣味测试引流裂变神器,流量主激励广告实现管道收益
  10. PCIE-PCB设计规范!(建议收藏)