高中信息技术 全国青少年奥林匹克联赛教案 枚举法

高中信息技术 全国青少年奥林匹克联赛教案 枚举法

ID:29306721

大小:75.50 KB

页数:4页

时间:2018-12-18

高中信息技术 全国青少年奥林匹克联赛教案 枚举法_第1页
高中信息技术 全国青少年奥林匹克联赛教案 枚举法_第2页
高中信息技术 全国青少年奥林匹克联赛教案 枚举法_第3页
高中信息技术 全国青少年奥林匹克联赛教案 枚举法_第4页
资源描述:

《高中信息技术 全国青少年奥林匹克联赛教案 枚举法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、信息学奥赛中的基本算法(枚举法)枚举法,常常称之为穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。能使命题成立者,即为问题的解。采用枚举算法解题的基本思路:(1)确定枚举对象、枚举范围和判定条件;(2)一一枚举可能的解,验证是否是问题的解下面我们就从枚举算法的的优化、枚举对象的选择以及判定条件的确定,这三个方面来探讨如何用枚举法解题。枚举算法应用例1:百钱买百鸡问题:有一个人有一百块钱,打算买一百只鸡。到市场一看,大鸡三块钱一只,小鸡一块钱三只,不大不小的鸡两块钱一只。现在,请你编一程序,帮他计划一下,怎么样买法,才能刚

2、好用一百块钱买一百只鸡?算法分析:此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件,穷举各种鸡的个数。下面是解这个百鸡问题的程序varx,y,z:integer;beginforx:=0to100dofory:=0to100doforz:=0to100do{枚举所有可能的解}if(x+y+z=100)and(x*3+y*2+zdiv3=100)and(zmod3=0)thenwriteln('x=',x,'y=',y,'z=',z);{验证可能的解,并输出符合题目

3、要求的解}end.上面的条件还有优化的空间,三种鸡的和是固定的,我们只要枚举二种鸡(x,y),第三种鸡就可以根据约束条件求得(z=100-x-y),这样就缩小了枚举范围,请看下面的程序:varx,y,z:integer;beginforx:=0to100dofory:=0to100-xdobeginz:=100-x-y;if(x*3+y*2+zdiv3=100)and(zmod3=0)thenwriteln('x=',x,'y=',y,'z=',z);end;end.未经优化的程序循环了1013次,时间复杂度为O(n3);优化后的程序只循环了(102*101/2)次,

4、时间复杂度为O(n2)。从上面的对比可以看出,对于枚举算法,加强约束条件,缩小枚举的范围,是程序优化的主要考虑方向。在枚举算法中,枚举对象的选择也是非常重要的,它直接影响着算法的时间复杂度,选择适当的枚举对象可以获得更高的效率。如下例:例2、将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数.例如:三个三位数192,384,576满足以上条件.(NOIP1998pj)算法分析:这是1998年全国分区联赛普及组试题(简称NOIP1998pj,以下同)。此题数据规模不大,可以进行枚举,如果我们不加思地

5、以每一个数位为枚举对象,一位一位地去枚举:fora:=1to9doforb:=1to9do………fori:=1to9do这样下去,枚举次数就有99次,如果我们分别设三个数为x,2x,3x,以x为枚举对象,穷举的范围就减少为93,在细节上再进一步优化,枚举范围就更少了。程序如下:vart,x:integer;s,st:string;c:char;beginforx:=123to321do{枚举所有可能的解}begint:=0;str(x,st);{把整数x转化为字符串,存放在st中}str(x*2,s);st:=st+s;str(x*3,s);st:=st+s;forc

6、:='1'to'9'do{枚举9个字符,判断是否都在st中}ifpos(c,st)<>0theninc(t)elsebreak;{如果不在st中,则退出循环}ift=9thenwriteln(x,'',x*2,'',x*3);end;end.在枚举法解题中,判定条件的确定也是很重要的,如果约束条件不对或者不全面,就穷举不出正确的结果, 我们再看看下面的例子。例3一元三次方程求解(noip2001tg)问题描述有形如:ax3+bx2+cx+d=0这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至1

7、00之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。提示:记方程f(x)=0,若存在2个数x1和x2,且x1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。