《NOIP2011初赛普及组C++题目及答案.docx》由会员分享,可在线阅读,更多相关《NOIP2011初赛普及组C++题目及答案.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、NOIP2011 第十七届信息学奥林匹克竞赛初赛( 普及组C+语言二小时完成 ) 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效一、 单项选择题 (共 20 题,每题 1.5 分,共计 30 分。每题有且仅有一个正确选项。)1在二进制下,1011001 + () = 1100110。A1011B1101C1010D11112. 字符“0”的 ASCII 码为 48,则字符“9”的 ASCII 码为()。A39B57C120D视具体的计算机而定3. 一片容量为8G的SD卡能储存大约()张大小为2MB的数码照片。A1600B2000C4000D 160004. 摩尔定律(Moores law
2、)是由英特尔创始人之一戈登摩尔(Gordon Moor)提出来的。根据摩尔定律,在过去几十年一级在可预测的未来纪念,单块集成电驴的集成度大约每()个月翻一番。A1B 6C 18D 365. 无向完全图是图中每对顶点之间都恰好有一条边的简单图。已知无向完全图 G 有 7 个顶点,则它共有()条边。A7B21C42D496寄存器是( A硬盘)的重要组成部分。B高速缓存C内存D中央处理器(CPU)7. 如果根结点的深度记为 1,则一棵恰有 2011 个叶结点的二叉树的深度最少是()。A10B11C12D138. 体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。每个同学按顺序来
3、到操场时,都从排尾走到排头,找到第一个比自己高的同学,并站在他的后面。这种站队的方法类似于()算法。A快速排序B插入排序C冒泡排序D归并排序 9一个正整数在二进制下有 100 位,则它在十六进制下有()位。A7B13C25D不能确定10. 有人认为,在个人电脑送修前,将文件放入回收站中就是已经将其删除了。这种想法是()。A. 正确的,将文件放入回收站以为着彻底删除、无法恢复B. 不正确的,只有将回收站清空后,才意味着彻底删除、无法恢复C. 不正确的,即使回收站清空,文件只是被标记为删除,仍可能通过回复软件找回NOIP2011 初赛普及组 C+ 10D. 不正确的,只要在硬盘上出现过的文件,永远
4、不可能被彻底删除11. 广度优先搜索时,需要用到的数据结构是( )。A. 链表B队列C栈D散列表12. 在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指( )。A. 程序运行时理论上所占的内存空间 B程序运行时理论上所占的数组空间 C程序运行时理论上所占的硬盘空间 D程序源文件理论上所占的硬盘空间13. 在含有 n 个元素的双向链表中查询是否存在关键字为 k 的元素,最快情况下运行的时间复杂度是( )。AO(1 )BO( log n )CO( n )DO( n log n )14. 生物特征识别,是利用人体本身的生物特征进行身份认证的一种技术。目前,指纹识别、虹膜识别、人脸识
5、别等技术已广泛应用于政府、银行、安全防卫等领域。一下不属于生物特征识别技术及其应用的是( )。A. 指静脉验证B步态验证CATM 机密码验证D声音验证15. 现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由 4 个汉字“之”、“呼”、“者”、“也”组成,它们出现的次数分别为 700、600、300、200。那么, “也”字的编码长度是()。A1B2C3D416. 关于汇编语言,下列说法错误的是()A. 是一种与具体硬件相关的程序设计语言B. 在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试 C可以直接反问寄存器、内存单元、以及 I/O 端口D随着高级语言的
6、诞生,如今已完全被淘汰,不再使用17()是一种选优搜索法,按选优条件向前搜索,以达到目标。当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。:A回溯法B枚举法C动态规划D贪心181956 年()手语肖克利、巴丁和布拉顿,以表彰他们对半导体的研究和晶体管效应的发现。A诺贝尔物理学奖B约翰冯诺依曼奖C图灵奖 D高德纳奖19. 对一个有向图而言,如果每个节点都存在到达其他任何节点的路径,那么就称它是强连通的。例如,有图就是一个强连通图。事实上,在删掉边()后,它依然是强连通的。A. aBbCcDd20. 从 ENIAC 到当前最先进的计算机,冯诺依曼体系结构始终占有重要地位。冯诺
7、依曼提醒结构的核心内容是()。A. 采用开关电路 B采用半导体器件 C采用存储程序和程序控制原理D采用键盘输入二问题求解(共 2 题,每空 5 分,共计 10 分)1. 每份考卷都有一个 8 位二进制序列号。当且仅当一个序列号含有偶数个 1 时,它才是有效的。例如,0000000、01010011 都是有效的序列号,而 11111110 不是。那么,有效的序列号共有 个。2. 定义字符串的基本操作为:删除一个字符插入一个字符和将一个字符修改成另外一个字符这三种操作。将字符串变成字符串的最少操作步数,称为字符串到字符串的编辑距离。字符串“ABCDEFG”到字符串“BADECG”的编辑距离为。三阅
8、读程序写结果(共 4 题,每题 8 分,共计 32 分)1 #include using namespace std;int main()int i,n,m,ans; cinnm; i=n;ans=0; while(i=m)ans+=i; i+;coutansendl; return 0;输入:10 20输出:2#include #include using namespace std;int main()string map= 2223334445556667778889999;string tel; int i; cintel;for(i=0;i=0) & (teli=9) )cout=A
9、) & (teli=Z) coutmapteli-A;coutendl; return 0;输入:CCF-NOIP-2011输出:3 #include #include using namespace std;const int SIZE = 100; int main()int n,i,sum,x,aSIZE;cinn; memset(a,0,sizeof(a);for(i=1;ix; ax+; i=0;sum=0; while(sum(n/2+1)i+;sum+=ai;coutiendl; return 0;输入:114 5 6 6 4 3 3 2 3 2 1输出:4 #include u
10、sing namespace std;int solve(int n,int m)int i,sum; if(m=1) return 1; sum=0; for(i=1;inm;coutsolve(n,m)endl; return 0;输入:7 4输出:四完善程序 (前 11 空,每空 2 分,后 2 空,每空 3 分,共 28 分)1(子矩阵)给输入一个 n1*m1 的矩阵 a,和 n2*m2 的矩阵 b,问 a 中是否存在子矩阵和 b 相等。若存在,输出所有子矩阵左上角的坐标:若不存在输出“There isno answer”。#include using namespace std;co
11、nst int SIZE = 50;int n1,m1,n2,m2,aSIZESIZE,bSIZESIZE;int main()int i,j,k1,k2;bool good ,haveAns;cinn1m1; for(i=1;i=n1;i+)for(j=1;jaij;cinn2m2; for(i=1;i=n2;i+)for(j=1;j=m2;j+);haveAns=false; for(i=1;i=n1-n2+1;i+)for(j=1;j=;j+); for(k1=1;k1=n2;k1+)for(k2=1;k2=;k2+)if(ai+k1-1j+k2-1!=bk1k2) good=false
12、;if(good)couti jendl;if(!haveAns)coutThere is no answerendl;return 0;2. (大整数开方) 输入一个正整数 n(1n10100),试用二分法计算它的平方根的整数部分。#include #include using namespace std;const int SIZE=200; struct hugeintint len,numSIZE;/其中 len 表示大整数的位数;num1表示个位,num2表示十位,以此类推hugeint times(hugeint a,hugeint b)/ 计算大整数 a 和 b 的乘积int i
13、,j; hugeint ans;memset(ans.num,0,sizeof(ans.num); for(i=1;i=a.len;i+)for(j=1;j=b.len;j+)+=a.numi*b.numj; for(i=1;i0) ans.len=a.len+b.len;elseans.len=a.len+b.len-1; return ans;hugeint add(hugeint a,hugeint b)/计算大整数 a 和 b 的和int i; hugeint ans;memset(ans.num,0,sizeof(ans.num); if(a.lenb.len)ans.len=a.l
14、en; elseans.len=b.len; for(i=1;i0) ans.len+;return ans;hugeint average(hugeint a,hugeint b)/计算大整数 a 和 b 的平均数的整数部分int i; hugeint ans; ans=add(a,b);for(i=ans.len;i=2;i-)ans.numi-1+=()*10;ans.numi/=2;ans.num1/=2; if(ans.numans.len=0)ans.len-; return ans;hugeint plustwo(hugeint a)/ 计算大整数 a 加 2 之后的结果int
15、i; hugeint ans; ans=a; ans.num1+=2; i=1;while( (i=10) ) ans.numi+1+=ans.numi/10; ans.numi%=10;i+;if(ans.numans.len+10); return ans;bool over(hugeint a,hugeint b)/ 若大整数 ab 则返回 true,否则返回 falseint i;if() return false;if( a.lenb.len ) return true;for(i=a.len;i=1;i-)if(a.numib.numi) return true;return false;int main()string s; int i;hugeint target,left,middle,right; cins; memset(target.num,0,sizeof(target.num); target.len=s.length(); for(i=1;i=1;i-)coutbij m1-m2+1 good=true m2 haveAns=true2. ans.numi+j-1 ans.numi%=10 a.numi+b.numi ans.numi % 2 ans.len+ a.lenb.len 0或 48 times(middle,middle),target