-
2022-02-11 12:59:17
枚举算法的基本定义:
所谓的枚举算法也叫穷举算法,指的是从问题中所有解的集合中一一枚举各个元素。用题目中给定的条件来判断哪些是有用的,那些是没有用的,能使命题成立,即为其解。
优点:算法简单,局部的应用效果非常不错。
缺点:运算量过大,当问题的规模很大的时候,循环的阶数越大执行的效率越慢。
例题 :
百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:
公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有。问:公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
分析:
估计现在小学生都能手工推算这套题,只不过我们用计算机来推算,我们可以设公鸡为x,母鸡为y,小鸡为z,
那么我们可以得出如下的不定方程,
x+y+z=100, ①
5x+3y+z/3=100, ②
①代表100鸡和②代表100钱。
下面再看看x,y,z的取值范围。
由于只有100文钱,则5x<100 => 0<x<20, 同理 0<y<33,那么z=100-x-y,
代码:
count=0 for x in range(0,21): for y in range(0,34): z= 100-x-y count +=1 if 5*x+3*y+z/3==100: print('公鸡',x,'母鸡',y,'小鸡',z) print('循环运行的次数',count)
更多相关内容 -
第四讲运用枚举法解应用题.doc
2021-09-20 17:47:34第四讲运用枚举法解应用题.doc -
又直观又好用的枚举法
2021-05-25 04:40:41原标题:又直观又好用的枚举法又直观又好用的枚举法枚举法又称为穷举法,...一般枚举法通过列表或画图来表示所有符合题目的情况,下面通过几道真题来感受枚举法的魅力之所在。【例1】2016年,甲、乙、丙、丁四个教...原标题:又直观又好用的枚举法
又直观又好用的枚举法
枚举法又称为穷举法,适用于以下两种情况:
1、当题目出现操作次数比较少或者要比较的数据(题目或选项)比较小时,优先考虑枚举法。
2、当题目出现操作过程一致或者要比较的数据非常大的时侯,可以通过枚举法找到规律,从而归纳出答案。
一般枚举法通过列表或画图来表示所有符合题目的情况,下面通过几道真题来感受枚举法的魅力之所在。
【例1】2016年,甲、乙、丙、丁四个教研室共在学术期刊上发表文章28篇,已知甲发表的文章数不到10篇且不少于乙,乙发表的文章数不少于丙,丙发表的文章数不少于丁,丁发表的文章数是奇数。问每个教研室发表的文章数有多少种不同的可能性?
A. 4 B. 6
C. 8 D. 10
【答案】C
【解析】由题意,甲≥乙≥丙≥丁,且总数为28。甲不超过10、丁为奇数,所以有如下8种情况:
【例2】小赵每工作9天连休三天,某次他在周五、周六和周日连休,问他下一次在周六、日连休是在本次连休之后的第几周?
A. 3 B. 5
C. 7 D. 9
【答案】B
【解析】由题意,可列表格如下:
很明显下次再周六周日休息的在本次连休之后的第五周。因此,选择B选项。返回搜狐,查看更多
责任编辑:
-
C语言之枚举法
2019-09-15 21:53:22浅谈C语言枚举法 1.枚举法:顾名思义,枚举法就是将所有可能的情况一一枚举出来,再进行筛选,找出符合条件的情况。 例题:乒乓球队分配问题:甲、乙两个球队比赛,甲乙各出3人进行比赛,甲出A,B,C 3人,乙出X,Y,Z 3...浅谈C语言枚举法
1.枚举法:顾名思义,枚举法就是将所有可能的情况一一枚举出来,再进行筛选,找出符合条件的情况。
例题:乒乓球队分配问题:甲、乙两个球队比赛,甲乙各出3人进行比赛,甲出A,B,C 3人,乙出X,Y,Z 3人进行比赛,已知A不和X比,C不和X,Z比,编程求甲乙比赛名单;
解:A的对手只有X,Y,Z 3人,B的对手也是X,Y,Z 3人,同样C的对手也是X,Y,Z 3人,总的分配方案有3 * 3 * 3=27种,不符合的情况:A不和X比,C不和X,Z比,还有A的对手,B的对手,C的对手不能相同;去掉这些不符合的情况就是所求的分配方案;代码看下:for(char a='X';a<='Z';a++)//A的对手就是a { for(char b='X';b<='Z';b++)//B的对手就是b { for(char c='X';c<='Z';c++)//C的对手就是c { if(a!='X'&&c!='X'&&c!='Z'&&a!=b&&a!=c&&b!=c)//不符合条件的情况 printf("A->%c,B->%c,C->%c\n",a,b,c); } } }
编译结果为:A的对手Z,B的对手X,C的对手Y;
2.经典笔试题:在一个陌生的国度,有5种不同的硬币单位:15、23、29、41和67(分)。寻找所有组成18元8分(即1808分)的可能组合。假定对于所有面值的硬币你都有足够的硬币。
解:这道题也是一道经典的用枚举法求解的题。首先15分的硬币从0(最少)到1808/15种(最多);同理23分硬币0 ~ 1808/23(做除法);29分硬币0 ~ 1808/29;41分硬币0 ~ 1808/41;67分硬币0 ~ 1808/67;这样15、23、29、41、67分硬币只需满足15 * i+23 * j+29 * k+41 * h+67 * s=1808就是符合条件的组合;其中i,j,k,h,s都是在对应的硬币的范围之内(最少到最多);
代码如下:for(int i=0;i<=n/15;i++)//15分硬币 { for(int j=0;j<=n/23;j++)//23分硬币 { for(int k=0;k<=n/29;k++)//29分硬币 { for(int h=0;h<=n/41;h++)//41分硬币 { for(int s=0;s<=n/67;s++)//67分硬币 { if(i*15+j*23+k*29+h*41+s*67==n) { printf("15分硬币%d个,23分硬币%d个,29分硬币%d个,41分硬币%d个,67分硬币%d个\n",i,j,k,h,s); } } } } } }
结果可自行编译求解;
以上就是枚举法的一些简单应用,枚举法在C语言中是一个很重要的方法,其思想在C语言编程中有很多体现,希望对大家有帮助。。。
-
算法思想之枚举法
2021-04-20 15:43:17算法思想之枚举法 枚举法的基本思想 在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法(穷举法)。 枚举法的核心思想就是枚举所有可能,其...枚举法的基本思想
- 在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法(穷举法)。
- 枚举法的核心思想就是枚举所有可能,其本质就是在所有可能的候选答案中搜索问题可能的解。使用枚举法应满足两个条件:
(1)可预先确定候选答案的数量
,(2)候选答案的范围在求解之前必须有一个确定的集合
。 - 枚举法的结构通常是
循环+判断
。
枚举法的优缺点
优点
- 算法简单,在局部地方使用枚举法,效果十分的好;
- 得到的结果肯定是正确的;
缺点
- 可能做了很多的无用功,浪费了宝贵的时间,效率低下;
- 运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢。
应用枚举法的基本思路
step1. 确定枚举对象、枚举范围和判定条件; step2. 枚举可能的解,验证是否是问题的解。
枚举法示例
百元买鸡问题
[问题描述] 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
[思路解析] 由题可设买公鸡 x x x 只,买母鸡 y y y只,买小鸡 z z z只,有方程 x + y + z = 100 , 5 x + 3 y + z / 3 = 100 x+y+z=100, 5x+3y+z/3=100 x+y+z=100,5x+3y+z/3=100,由此可得代码:''' 百元买鸡问题 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何? ''' def enum(): res = [] for x in range(1, 101): for y in range(1, 101): for z in range(3,101,3): if x*5 + y*3 + z/3 == 100 and x + y + z == 100: res.append([x,y,z]) return res res = enum() for each in res: print(f'买公鸡{each[0]}只,母鸡{each[1]}只,小鸡{each[2]}只')
[结果]
买公鸡4只,母鸡18只,小鸡78只
买公鸡8只,母鸡11只,小鸡81只
买公鸡12只,母鸡4只,小鸡84只 -
Python | 关于枚举法的奥秘
2021-06-08 00:38:44这就是今天小编想讲的枚举法:把能想到的所有可能性全部列出来,然后再逐个筛选,剔除不符合题意的(用这题举例,比如全部投进两分球,很明显不符合题意,直接pass)。 使用枚举法时注意的事项:(1)可以先直观... -
回溯法与枚举法
2018-08-30 10:42:531 回溯法应用 回溯法,顾名思义,生活中有一类人,很执拗,比如我,不到黄河心不死,到了黄河怎么办?往回走呗,难不成跳下去? 回溯法解决的问题有全排列,全组合,枚举什么的。 比如,给定一串不重复字母,让你... -
《第二章 算法实例(枚举算法)》_枚举算法生活实例
2019-12-14 12:09:13第二章 算法实例;一作业回顾;第6题;...枚举法的注意点 1选定合适的研究对象的范围 2找到判断正确解的条件列举 3逐一检验范围内的所有研究对象;例1涂抹数字;算法描述 1计数器c0 2j0 3判断j,是转4否转向 -
枚举的简单例题
2020-03-20 22:56:45描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: ...2、a和b的枚举范围在0~1111之间,因... -
蓝桥杯Java——枚举法
2022-03-02 22:01:35枚举法的应用 1.鸡兔同笼 2.韩信点兵 3.年龄问题 4.统计方形 1~5题为填空题 第1题较为简单,不用编程也能得出答案。 6~10题为编程题 重点算法:(1)枚举;(2)递推递归;(3)动态规划;(4)搜索;(5)回溯。 ... -
LeetCode 二进制在枚举法上的应用
2021-03-31 09:54:53二进制位运算可以用来枚举,dp状态压缩的时候也可以派上用场。还有像是树状数组就是基于位运算。 题解 78. 子集 对有n个数的的数组,他的子集个数应该是2n2^n2n,在[0,2n)[0,2^n)[0,2n)中遍历iii,不难发现,将数组... -
【算法设计zxd】第四章蛮力法 1.枚举法 02穷举查找
2022-03-13 19:15:48蛮力法(brute force): 直接基于问题的 描述和所涉及的概念定义的进行算法 设计,简单而直接。 使用蛮力法… : ...(1) 蛮力法所能解决的问题跨越的领域非常广泛。...(2) 对于一些重要的问题,... 枚举法的算法框 -
蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心...
2022-03-11 20:09:35一、打表模拟法 介绍 模拟法是比赛中最常用的方法,使用各种算法大都离不开模拟,而对于一些只是需要结果的题目来说打表法是一个非常好的解决方案,而且对于数论等其他需要找规律的题目来说,打表法是一个非常有用的... -
枚举法思路和应用
2010-03-28 14:44:00做很多无用功,甚至会超出枚举者的枚举极限(如无限个解)但是我们也应该看到枚举法的优点,在一些规模小的问题,应用枚举法会快速解决问题。应用枚举法的场合:1.搜索解空间解空间就是一个问题的解的集 -
二分法、枚举
2018-02-07 13:46:00知识点总结报告 知识点: 二分法 ... 枚举法,又称穷举法,其基本思想是在一个有穷的问题所有 可能解的集合中,按某种顺序逐一枚举各个元素,用给定的 约束条件判定元素是否符合条件,若满足... -
应用枚举求解.PPT
2021-07-22 06:03:18应用枚举求解?... 枚举的概念 (1) 枚举法(Enumerate)也称为列举法、穷举法,是蛮力策略的体现,又称为蛮力法。 (2) 枚举是一种简单而直接地解决问题的方法,其基本思想是逐一列举问题所涉及的所有情形 。 (... -
枚举的应用
2016-09-17 15:05:31自学类容:枚举的应用 2016.09.17 为了装装逼,正值中秋放假之际,书带着哥来到了图书馆,看数据结构时,发现用的是C语言版,可是哥学C已经过去三年了,哥全忘了啊。 于是去外面买了一本谭老师的C程序设计。... -
编程算法之枚举法
2015-04-11 22:41:47枚举法是编程里常用的算法之一,依赖于计算机的强大计算能力来穷尽没一种可能的情况,从而达到解决问题的目的,改算法效率并不高,但适用于一些没有明显规律可循的环境。 在小学奥数中经常会看到一些填数字的... -
蓝桥杯C语言培训1例题(1) 九宫幻方(枚举法的应用)
2018-03-06 09:31:46本题思路为列出所有的九宫幻方,将输入的数字与其一 一比较,用字符串来储存幻方。 代码 #include #include char numString[8][9] = {"492357816", "834159672", "618753294", "276951438", "294753618", ... -
【C语言学习笔记】算法篇——枚举算法
2020-09-09 20:16:25#学习资料:《啊哈!算法》、《算法图解》 ...应用实例 均取自于啊哈!算法 @代码一:奥数题 #include <stdio.h> int main() { int a[10], i, total=0, book[10], sum; for ( a[1]=1; a[1]<=9; a[1]+ -
暴力求解法(枚举,搜索,回溯,剪枝策略)
2022-03-03 14:13:22暴力求解法,介绍枚举,排列,搜索剪枝,回溯 -
Js拓展_枚举算法
2021-11-09 11:37:32// 对序列E,X,A,M,P,L,E按字母排序,要求应用:(1)冒泡排序 (2)选择排序 1.冒泡排序 代码如下(示例): // (1)冒泡排序 var arr = ["E", "X", "A", "M", "P", "L", "E"] console.log("原始数据" + arr) var len... -
五大基础算法(枚举、递归、分治、贪心、模拟)
2013-12-18 13:09:02一、枚举法 枚举法,本质上就是搜索算法。 基本思想: 枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素。 用题目中给定的检验条件判定哪些是无用的,哪些是有用的。能使命题成立。即为其解。 -
枚举算法
2018-05-10 21:44:04枚举算法的特点枚举算法的思想是:将问题的所有可能的答案一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。看下的问题:找出1~100 之间的素数,需要将1~100 之间的所有整数进行判断。因为枚举算法... -
回溯法及其应用
2017-03-18 20:32:18二、回溯法应用 1.01背包问题。 01背包问题描述:有编号分别为a,b,c,d,e的五件物品 n=5,它们的重量分别是w1=2,w2=2,w3=6,w4=5,w5=4,它们的价值分别是v1=6,v2=3,v3=5,v4=4,v5=6,每件物品数量只有一个,现在... -
高一【信息技术(人教中图版)】算法与程序综合应用1 (第十九课时)-练习题.docx
2020-11-04 20:17:29课程基本信息 课例编号 学科 信息技术 年级 高一 学期 秋季 ...课堂任务 任务一观看微课中用枚举法求解问题编写程序的内容理解以下案例程序代码的内涵在Python语言编译器中输入相关代码体验运行结果 y5 = int(input"排 -
穷举法应用举例.doc
2020-12-12 16:15:22无止境穷举法应用举例在数学问题中,有一些需要计算总数或种类的趣题,因其数量关系比较隐蔽,很难找到“正统”的方式解答,让人感到无从下手。对此,我们可以先初步估计其数目的大小。若数目不是太大,就按照一定的... -
C++暴力搜索(枚举)使用方法
2022-02-18 20:33:43当你夜深人静的时候,当你还在苦苦的使用搜索却无法看透问题的本质是,你可以试试这个宇宙无敌的搜索方式,没有花里胡哨,没有技巧,只有从头到尾的遍历+遍历,他就是无敌的枚举,是真的啥题都能做的玄学搜索,真的... -
高级java笔试题-Book:一些书
2021-06-03 00:27:24高级java笔试题 Welcome come to here ! Books: 链接: 提取码: 31mc 推荐一下「算法与数据结构」从入门到进阶的书单。 一.入门系列 这些书籍通过图片、打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,... -
Java 虚拟机面试题全面解析(干货)
2021-04-09 05:30:17Java 虚拟机面试题全面解析,《深入理解Java虚拟机》干货版,自己总结,希望能够帮助大家,免费下载~什么是类加载机制? 虚拟机和物理机的区别是什么? 运行时栈帧结构 Java方法调用 什么是方法调用? Java的方法调用,...