枚举算法
来源:互联网 发布:淘宝淘管家在哪里找到 编辑:程序博客网 时间:2024/05/19 06:51
**
算法定义
**
枚举算法(Exhaustion Attack method,也称作“穷举法”)是指从可能的集合中一一列举出各个元素,用题目给定的约束条件判断那些是无用的,那些是有用的。能使命题成立者即为问题的解。
枚举算法效率并不高,但是适合于一些没有明显规律可循的场合。
能解决什么问题(应用场合)
根据算法的定义,可以发现该算法有如下特点:
(1)题目的答案是一个有穷的集合,即答案可以被一一列举出来;
(2)题目存在给定的约束条件,根据条件可以判断哪些答案符合要求,哪些答案不符合要求。
(3)算法存在循环运算,一般使用while循环实现。
**
算法的优缺点
**
优点:思路简单,无论是程序编写,还是调试都很方便。如果题目不是很大,在规定的时间与空间限制内能够求出解,那么最好是采用枚举法。
缺点:是运算量比较大,解题效率不高。如果枚举范围太大(一般以不超过2 000 000次为限),效率低的问题会在时间上难以承受。
算法思路
枚举算法一般按照如下3个步骤:
第一步:确定解题范围,枚举出所有可能的题解;
第二步:判断题解是否符合正解的条件;
第三步:使可能解的范围降至最小,以便提高解题效率。
**
案例分析【百钱买百鸡】
**
这是依据我国古代数学家张丘建在《算经》上的“百鸡问题”编写而成的。“百鸡问题”是一道闻名于世界的题目,很有价值,也很有趣味。题目的原文是:
“今鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。凡百钱买鸡百只,问:鸡翁、母、雏各几何?”
用通俗的话来说,题目的意思可以是:
用100文钱买来100只鸡,公鸡5文钱一只,母鸡3文钱一只,小鸡1文钱3只。问:在这100只鸡中,公鸡、母鸡、小鸡各是多少只?
使用不定方程求解“百钱买百鸡”的问题,其解题如下:
解:设公鸡X只,母鸡Y只,小鸡Z只;得
枚举算法 - 依波路 - 依波路的博客
这里X、Y、Z为正整数,且Z是3的倍数;由于鸡和钱的总数都是100,可以确定X、Y、Z的取值范围。
X的取值范围为0~20(100÷5=20)
Y的取值范围为0~33(100÷3≈33)
Z的取值范围为0~99,步长为3
**
算法分析
**
使用枚举方法解决这样的问题,只需遍历x、y、z的所有可能组合,即得到问题的解。
数据要求
问题中的常量:无
问题的输入:无
**
具体实现代码如下
**
include “stdio.h”
main(){int x,y,z;for(x=0;x<=20;x++){ for(y=0;y<=33;y++){ z=100-x-y; if((5*x+3*y+z/3==100)&&(x+y+z==100)) printf("公鸡:%d,母鸡:%d,小鸡:%d\n",x,y,z);} }}
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举算法
- 枚举-算法
- 【枚举算法】枚举法概念
- 转贴 : 枚举算法
- ACM--枚举算法
- 枚举(穷举)算法
- 关于排列枚举算法
- 枚举算法简介
- 枚举算法(一)
- 模拟和枚举算法
- javascript--枚举算法实现
- 算法之枚举法
- 算法之枚举思想
- 再谈javascript面向对象编程
- C++STL:向map中添加元素的方法对比
- Android 编程下 px - dp 的相互转换
- unity5 新的全局光照系统,移动设备可用部分
- 第10题
- 枚举算法
- 第二章习题
- 黑马程序员-----异常
- 《C++编程》第3章第10题
- Javascript 装载和执行
- 4,在本章第2.6.2(题目错误)节中给出了包含类定义的头文件student.h,包含成员函数定义的源文件student.cpp以及包含主函数的源文件main.cpp。请完善该程序,在类中增加一个对数
- 浏览器的渲染原理简介
- 【编程之美】2.4从1到N中1出现的数目----出现任意一个数的个数。
- Beginning