ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:229.92KB ,
资源ID:5226999      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5226999.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整wordNOIP初赛提高组试题解析.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整wordNOIP初赛提高组试题解析.docx

1、完整wordNOIP初赛提高组试题解析19.2 十九届提高组一、单项选择题(共15题,每题1.5分,共计22.5分;每题有且仅有一个正确选项)1一个32位整型变量占用( A )个字节。A4 B8 C32 D1282二进制数11.01在十进制下是( A )。A3.25 B4.125 C6.25 D11.1253下面的故事与( B )算法有着异曲同工之妙。从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事”A枚举 B递归 C贪心 D分治41948年,( D )将热力学中的熵引入信息

2、通信领域,标志着信息论研究的开端。A冯诺伊曼(John von Neumann) B图灵(Alan Turing)C欧拉(Leonhard Euler) D克劳德香农(Claude Shannon)【分析】 香农信息论鼻祖5已知一棵二叉树有2013个节点,则其中至多有( A )个节点有2个子节点。A1006 B1007 C1023 D1024【分析】(1)树根深度为0,深度为10的满二叉树节点总数2047; (2)本题树深为10的完全二叉树,与满二叉树相比少了34个节点,(3)深度为9的满二叉树节点总数量为1023;(4)1023-(34/2)=10066在一个有向图中,如果任意两点之间都存在

3、路径相连,则称其为连通图。右图是一个有5个顶点、8条边的连通图。若要使它不再是连通图,至少要删去其中的( B )条边。A2 B3 C4 D5【分析】要使图不联通,只要其中某一个节点不连通即可,所有顶点度最少是3,所以最少需要删除3条边7斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn-1+Fn-2(n3)。如果用下面的函数计算斐波那契数列的第n项,则其时间复杂度为( D )。function F(n:longint):longint;begin if n=2 then F:=1 else F:=F(n-1)+F(n-2);end;AO(1) BO(n) CO(n2) DO(Fn)【分析】

4、计算F1需要1次,计算F2需要一次,计算Fn需要计算F(n-1)的次数加上F(n-2)的次数,所以其实就是计算Fn次,于是答案选择D,至于这个Fn到底是多大,数学上可以计算,它等于O((1+sqrt(5))/2)n).8二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点的值。那么,二叉查找树的( B )是一个有序序列。A先序遍历 B中序遍历 C后序遍历 D宽度优先遍历9将(2,6,10,17)分别存储到某个地址区间为010的哈希表中,如果哈希函数h(x)=( D ),将不会产生冲突,其中a mod b表示a除以b的余数。Ax mod 11 Bx2 mod

5、11C2x mod 11 Dmod 11,其中表示下取整【分析】A项6和17对11取余都是6发生冲突,B项10的平方和17的平方对11取余都是1发生冲突,C项6的两倍和17的两倍对11取余都是1发生冲突,D项分别为1,2,3,4,不冲突10IPv4协议使用32位地址,随着其不断被分配,地址资源日趋枯竭。因此,它正逐渐被使用( D )位地址的IPv6协议所取代。A40 B48 C64 D12811二分图是指能将顶点划分成两个部分,每一部分内的顶点间没有边相连的简单无向图。那么12个顶点的二分图至多有( C )条边。A18 B24 C36 D66【分析】二分为6个和6个的顶点,此时边最多,有36条

6、边。12( B )是一种通用的字符编码,它为世界上绝大部分语言设定了统一并且唯一的二进制编码,以满足跨语言、跨平台的文本交换。目前它已经收录了超过十万个不同字符。AASCII BUnicode CGBK2312 DBIG5【分析】UNICODE与ASCII的区别 .1.ASCII的特点(1)ASCII 是用来表示英文字符的一种编码规范。每个ASCII字符占用1 个字节,因此,ASCII 编码可以表示的最大字符数是255(00HFFH)。这对于英文而言,是没有问题的,一般只什么用到前128个(00H-7FH,最高位为0)。而最高位为1 的另128 个字符(80HFFH)被称为“扩展ASCII”,

7、一般用来存放英文的制表符、部分音标字符等等的一些其它符号。(2)但是对于中文等比较复杂的语言,255个字符显然不够用。于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB231280”, 它是和ASCII 兼容的一种编码规范, 其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII 字符来表示,以区分ASCII 码部分。 但是这个方法有问题,最大的问题就是中文的文字编码和扩展ASCII 码有重叠。而很多软件利用扩展ASCII 码的英文制表符来画表格,这样的软件用到中文系统中,这些表格就会被误认作中文字符,出现乱码。另外,由于各国和各地区都有自

8、己的文字编码规则,它们互相冲突,这给各国和各地区交换信息带来了很大的麻烦。2.UNICODE的产生(1)要真正解决这个问题,不能从扩展ASCII 的角度入手,UNICODE作为一个全新的编码系统应运而生,它可以将中文、法文、德文等等所有的文字统一起来考虑,为每一个文字都分配一个单独的编码。3.什么是UNICODEUnicode与ASCII一样也是一种字符编码方法,它占用两个字节(0000HFFFFH),容纳65536 个字符,这完全可以容纳全世界所有语言文字的编码。在Unicode 里,所有的字符都按一个字符来处理, 它们都有一个唯一的Unicode 码。13把64位非零浮点数强制转换成32位

9、浮点数后,不可能( D )。A大于原数 B小于原数 C等于原数 D与原数符号相反【分析】64位非零浮点数强制转换成32位浮点数,两个数会有大小上的细微差别,但不会发生符号变化,因为有专门的符号位14对一个n个顶点、m条边的带权有向简单图用Dijkstr算法计算单源最短路时,如果不使用堆或其它优先队列进行优化,则其时间复杂度为( B )。AO(mn+n3) BO(n2) CO(m+n)log n) DO(m+n2)log n)【分析】Dijkstra算法(双重for 循环)计算单源最短路时间复杂度如果不借助堆或优先队列优化,是O(n2).15T(n)表示某个算法输入规模为n时的运算次数。如果T(

10、1)为常数,且有递归式T(n)=2*T(n / 2)+2n,那么T(n) = ( B )。A(n) B(n log n) C(n2) D(n2log n)【分析】的含义和“等于”类似,而大O的含义和“小于等于”类似设 N(1 / 2) X=1 ,X=log2NT(n)=2*T(n / 2)+2n=2(2(T(n / 4)+2(n / 2)+2n=22T(n / 4)+(2n) 2=2XT(1)+(2n) X =2 log2N T(1)+(2N) log2N =N +(2N) log2N= O(N log2N)二、不定项选择题(共5题,每题1.5分,共计7.5分;每题有一个或多个正确选项,多选或

11、少选均不得分)1下列程序中,正确计算1,2,100这100个自然数之和sum(初始值为0)的是( AC )。2( AD )的平均时间复杂度为O(n log n),其中n是待排序的元素个数。A快速排序 B插入排序 C冒泡排序 D归并排序【分析】只有快速排序和归并排序是n log n的,冒泡和插入都是n2的时间复杂度。3以A0作为起点,对下面的无向图进行深度优先遍历时(遍历的顺序与顶点字母的下标无关),最后一个遍历到的顶点可能是( CD )。AA1 BA2 CA3 DA44( AB )属于NP类问题。A存在一个P类问题 B任何一个P类问题C任何一个不属于P类的问题 D任何一个在(输入规模的)指数时

12、间内能够解决的问题【分析】1. 时间复杂度:(1)时间复杂度:是指执行算法所需要的计算工作量。 时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。 (2)多项式时间算法:如果一个算法,它能在以输入规模为参变量的某个多项式的时间内给出答案,则称它为多项式时间算法。2. P类、NP类问题(1)P类问题的概念:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。 (2)NP类问题:NP(Non-deterministic Polynomial)问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可

13、以在多项式的时间里猜出一个解的问题。 (3)所有的P类问题都是NP问题。 NP问题不是非P类问题3. NPC问题(NP完全问题):Cook 在1971年给出并证明了有一类问题具有下述性质:(1)这类问题中任何一个问题至今未找到多项式时间算法;(2)如果这类问题中存在一个问题有多项式时间算法,则这类问题都有多项式时间算法这类问题就是所谓的NP完全问题。 (3)NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。5CCF NOIP复赛考试结束后,因( ABCD )提出的申诉将不会被受理。A源程序文件名大小写错误B源程序保

14、存在指定文件夹以外的位置C输出文件的文件名错误D只提交了可执行文件,未提交源程序三、问题求解(共2题,每题5分,共计10分;每题全部答对得5分,没有部分分)1 某系统自称使用了一种防窃听的方式验证用户密码。密码是n个数s1,s2,sn,均为0或1。该系统每次随机生成n个数a1,a2,an,均为0或1,请用户回答(s1a1+s2a2+snan)除以2的余数。如果多次的回答总是正确,即认为掌握密码。该系统认为,即使问答的过程被泄露,也无助于破解密码因为用户并没有直接发送密码。然而,事与愿违。例如,当n=4时,有人窃听了以下5次问答:就破解出了密码s1= 0 ,s2= 1 ,s3= 1 ,s4= 1

15、 。【分析】(1)由第5组得到s1=0;(2)由第1组、第5组得到s2=1;(3)由第1组、第3组得到s3=1;(3)由第2组、第3组得到s4=1;2 现有一只青蛙,初始时在n号荷叶上。当它某一时刻在k号荷叶上时,下一时刻将等概率地随机跳到1,2,k号荷尔蒙叶之一上,直至跳到1号荷叶为止。当n=2时,平均一共跳2次;当n=3时,平均一共跳2.5次。则当n=5时,平均一共跳 37/12 次。【分析递推】(1)由n=2时,跳法22,21共2次,平均跳的次数f2=2次,说明在求平均时编号1不统计在内。(2)由n=3时,跳法33,32,31,再从2号跳跳法22,21共5次,平均跳的次数f3=2.5次;

16、f3=(3+f2)/2=2.5(3)由n=4时,跳法分别是落在1号、2号、3号、4号;平均跳的次数f4=(4+f2+f3)/3=(4+2+2.5)/3 = 8.5/3(4)由n=5时,跳法分别是落在1号、2号、3号、4号、5号;平均跳的次数f5=(5+f2+f3+f4)/4=(5+2+2.5+8.5/3)/4= 37/12四、阅读程序写结果(共4题,每题8分,共计32分)1【字符串判定输入的字符串是否是回文串】varn,i:integer;str:string;isPlalindrome:Boolean;begin readln(str); n:=Length(str); isPlalindr

17、ome:=true; for i:=1 to (n idv 2) do begin if (stristrn-i+1) then isPlalindrome:=false; end; if (isPlalindrome) then writeln(Yes) else writeln(No);end.输入:abceecba输出: Yes 【分析】 str1str8、str2str7 、 str3str6 、str4str5这4对字符相同则返回true2【数学到1000中是或的倍数的数的个数】Var a,b,u,v,I,num:integer;begin readln(a,b,u,v);num:=

18、0;for i:=a to b dobegin if (I mod u=0)or(I mod v=0) then inc(num);end;writeln(num);end.输入:1 1000 10 15输出: 133 【分析】此题计数1-1000范围内能够整除10或15的数有多少个,使用容斥原理或者集合求并很容易可以得到1000/10+1000/15-1000/30=133.3【动态规划最长上升子序列的长度】const SIZE=100;var n,ans,I,j:integer;height,num:array1.SIZE of integer; begin read(n); for i:

19、=1 to n do begin read(heighti); numi:=1; for j:=1 to i-1 do beginif (heightj=numi) then numi:=numj+1; end;end; ans:=0; for i:=1 to n do begin if (numians) then ans:=ans+numi; end; writeln(ans);end.输入:83 2 5 11 12 7 4 10输出: 4 【分析】【1.状态描述】 (1)heighti存放的数组(2)numi:数组height1heighti中中包含heighti上升序列长度【2.状态转

20、移】 1. 初始状态:numi:=1; num1:=1; 2. 状态转移:从下标1逐步递推到n,求解numi numi=Max numj, (1= j= i-1, heightj height3=5,num4= num3+1=3【4.算法设计】 1. 初始状态:numi:=1; num1:=1; 求解numi的最优解2. 状态前驱: numi的前驱状态numj:num1 numi-13. 状态转移: (1)条件:if (heightj=numi) (2)转移方程:numi:=numj+1;4【深度优先搜索上下左右找棋盘数字为0的连续单元格数量】const SIZE=100;var n,m,p,

21、count,ans,x,y,I,j:integer;a:array1.SIZE,1.SIZE of integer;procedure colour(x,y:integer);begin inc(count); axy:=1; if (x1)and(ax-1y=0) then colour(x-1,y); /上 if (y1)and(axy-1=0) then colour(x,y-1); /左 if (xn)and(ax+1y=0) then colour(x+1,y); /下 if (ym)and(axy+1=0) then colour(x,y+1); /右end;begin fillc

22、har(a,sizeof(a),0); readln(n,m,p); for i:=1 to p do begin read(x,y); axy:=1; end; ans:=0; for i:=1 to n dofor j:=1 to m do if aij=0 then begincount:=0; colour(i,j); if (anscount) then ans:=count; end; writeln(ans);end.输入:6 5 91 42 32 43 24 14 34 55 46 4输出: 7 【分析】【1.状态描述】 (1)棋盘状态:axy:=1或0(2)count,ans

23、:数字为0的连续单元格数量,count当前解,ans当前最优解【2.状态转移】 1. 初始状态:查找棋盘每个值为0的单元格 aij=0 2. 状态转移:如果aij=0则 (1):状态修改 inc(count); aij:=1;(2):按上下左右4个方向深度搜索下一单元格【3.算法分析】分上下左右找数字为0的连续单元格数量【4.算法设计】 1. 初始状态:查找棋盘每个值为0的单元格 ,并以它为起点查找数字为0的连续单元格数量count,初始count:=02. 父状态axy=0 procedure colour(x,y:integer);begin 1. 计算新状态:inc(count); 2.

24、 父状态访问过标志:axy:=1; 3. 试探各种子状态可能按上下左右4个方向深度搜索下一单元格 4. 下一单元格值为0,则深度搜索colour(x-1,y) end;五、完善程序(第1题15分,第2题13分,共计28分)1(序列重排)全局数组变量a定义如下:const int SIZE=100;int aSIZE,n;它记录着一个长度为n的序列a1,a2,an。现在需要一个函数,以整数p(1pn)为参数,实现如下功能:将序列a的前p个数与后n-p个数对调,且不改变这p个数(或n-p个数)之间的相对位置。例如,长度为5的序列1,2,3,4,5,当p=2时重排结果为3,4,5,1,2。有一种朴素

25、的算法可以实现这一需求,其时间复杂度为O(n)、空间复杂度为O(n):procedure swap1(p:longint);var I,j:longint; b:array1.SIZE of longint;begin for i:=1 to p do b(1) n-p+i :=ai; /(2分) for i:=p+1 to n do bi-p:=ai; for i:=1 to n do ai:=bi;end;【分析】【算法设计】1. 第一种方法是通过开一个b数组,然后先将a数组中1到p的数复制到b数组中后p个位置:n-p+1到n。2. 将a数组p+1到n区间的数复制到b数组前段1n-p。3.

26、 最后再将b数组元素复制回a数组中;显然第一空是n-p+i。以p=3为例我们也可以用时间换空间,使用时间复杂度为O(n2)、空间复杂度为O(1)的算法:procedure swap2(p:longint);var I,j,temp:longint;begin for i:=p+1 to n do begintemp:=ai;for j:=I downto (2) i+1-p do aj:=aj-1; /(2分) (3) ai-p :=temp; /(2分) end;end;【分析】【1.算法分析】前P个数逐渐往后移动【2.算法设计】1.初始状态:将第p+1位置空出temp:=ai;,将前p个数

27、后移 2.空出位置i从p+1一直到n,移动的数就是i左边的p个数 3.将空出位置i原来的数temp放到i的前面空出的位置i-pai-p:=temp;事实上,还有一种更好的算法,时间复杂度为O(n)、空间复杂度为O(1);procedure swap3(p:longint);var start1,end1,start2,end2,I,j,temp:longint;begin start1:=1; end1:=p; start2:=p+1; end2:=n; while true do begin i:=star1; j:=start2; while (i=end1)and(j=end2) do begin temp:=ai; ai:=aj; aj:=temp; inc(i); inc(j);end;if i=end1 then start1:=ielse if (4) jend1) and( jend2) then 则交换的两段需要进行调整 (1)第一段start1、end1右移,应该在当前i、j之间: start1:=i ; end1:=J-1 (2)第二段start2右移、end2不变 start2:=j; 3. 状态转移2:第二段数组全部交换

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1