NOIP提高组初赛试题及答案C++版.docx
- 文档编号:30521321
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:18
- 大小:272.79KB
NOIP提高组初赛试题及答案C++版.docx
《NOIP提高组初赛试题及答案C++版.docx》由会员分享,可在线阅读,更多相关《NOIP提高组初赛试题及答案C++版.docx(18页珍藏版)》请在冰豆网上搜索。
NOIP提高组初赛试题及答案C++版
第十七届全国青少年信息学奥林匹克联赛初赛试题
(提高组C++语言两小时完成)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一、单项选择题(共10题,每题1.5分,共计15分。
每题有且仅有一个正确选项。
)
1.在二进制下,1011001+()=1100110。
A.1011B.1101C.1010D.1111
2.字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的()。
A.66B.5AC.50D.视具体的计算机而定
3.右图是一棵二叉树,它的先序遍历是()。
A.ABDEFCB.DBEFACC.DFEBCAD.ABCDEF
4.寄存器是()的重要组成部分。
A.硬盘B.高速缓存C.内存D.中央处理器(CPU)
5.广度优先搜索时,需要用到的数据结构是()。
A.链表B.队列C.栈D.散列表
6.在使用高级语言编写程序时,一般提到的“空间复杂度”中的空间是指()。
A.程序运行时理论上所占的内存空间
B.程序运行时理论上所占的数组空间
C.程序运行时理论上所占的硬盘空间
D.程序源文件理论上所占的硬盘空间
7.应用快速排序的分治思想,可以实现一个求第K大数的程序。
假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为()。
A.O(n2)B.O(nlogn)C.O(n)D.O
(1)
8.为解决web应用中的不兼容问题,保障信息的顺利流通,()制定了一系列标准,涉及HTML、XML、CSS等,并建议开发者遵循。
A.微软B.美国计算机协会(ACM)C.联合国教科文组织D.万维网联盟(W3C)
9.体育课的铃声响了,同学们都陆续的奔向操场,按老师的要求从高到低站成一排。
每个同学按顺序来到操场时,都从排尾走到排头,找到第一个比自己高的同学,并站在他的后面。
这种站队的方法类似于()算法。
A.快速排序B.插入排序C.冒泡排序D.归并排序
10.1956年()授予肖克利(WilliamShockley)、巴丁(JohnBardeen)和布拉顿(WalterBrattain)
A.诺贝尔物理学奖B.约翰·冯·诺依曼奖
C.图灵奖D.高德纳奖(DonaldE.KnuthPrize)
二、不定项选择题(共10题,每题1.5分,共计15分。
每题正确答案的个数不少于1。
多选或少选均不得分)。
1.如果根结点的深度记为1,则一棵恰有2011个叶子结点的二叉树的深度可能是()。
A.10B.11C.12D.2011
2.在布尔逻辑中,逻辑“或”的性质有()。
A.交换律:
PVQ=QVP
B.结合律:
PV(QVR)=(PVQ)VR
C.幂等律:
PVP=P
D.有界律:
PV1=1(1表示逻辑真)
3.一个正整数在十六进制下有100位,则它在二进制下可能有()位。
A.399B.400C.401D.404
4.汇编语言()。
A.是一种与具体硬件无关的程序设计语言
B.在编写复杂程序时,相对于高级语言而言代码量大,且不易调试
C.可以直接访问寄存器、内存单元、I/O端口
D.随着高级语言的诞生,如今已被完全淘汰,不再使用
5.现有一段文言文,要通过二进制哈夫曼编码进行压缩。
简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。
那么,“也”字的编码长度可能是()。
A.1B.2C.3D.4
6.生物特征识别,是利用人体本身的生物特征进行身份认证的一种技术。
目前,指纹识别、虹膜识别、人脸识别等技术已广泛应用于政府、银行、安全防卫等领域。
以下属于生物特征识别技术及其应用的是()。
A.指静脉验证B.步态验证C.ATM机密码验证D.声音验证
7.对于序列“7、5、1、9、3、6、8、4”,在不改变顺序的情况下,去掉()会使逆序对的个数减少3。
A.7B.5C.3D.6
8.计算机中的数值信息分为整数和实数(浮点数)。
实数之所以能够表示很大或者很小的数,是由于使用了()。
A.阶码B.补码C.反码D.较长的尾数
9.对右图使用Dijkstra算法计算S点到其余各点的最短路径长度时,到B点的距离d[B]初始时赋为8,在算法的执行过程中还会出现的值有()。
A.3B.7C.6D.5
10.为计算机网络中进行数据交换而建立的规则、标准或约定的集合称为网络协议。
下列英文缩写中,()是网络协议
A.HTTPB.TCP/IPC.FTPD.WWW
三.问题求解(共2题,每空5分,共计10分)
1.平面图可以在画在平面上,且它的边仅在顶点上才能相交的简单无向图。
4个顶点的平面图至少有6条边,如右图所示。
那么,5个顶点的平面图至少有条边。
2.定义一种字符串操作,一次可以将其中一个元素移到任意位置。
举例说明,对于字符串“BCA”可以将A移到B之前,变字符串“ABC”。
如果要将字符串“DACHEBGIF”变成“ABCDEFGHI”最少需要________次操作。
四.阅读程序写结果(共4题,每题8分,共计32分)
1.
#include
#include
usingnamespacestd;
constintSIZE=100;
intmain()
{
intn,i,sum,x,a[SIZE];
cin>>n;
memset(a,0,sizeof(a));
for(i=1;i<=n;i++){
cin>>x;
a[x]++;
}
i=0;
sum=0;
while(sum<(n/2+1)){
i++;
sum+=a[i];
}
cout<
return0;
}
输入:
11
45664332321
输出:
2.
#include
usingnamespacestd;
intn;
voidf2(intx,inty);
voidf1(intx,inty)
{
if(x f2(y,x+y); } voidf2(intx,inty) { cout< f1(y,x+y); } intmain() { cin>>n; f1(0,1); return0; return0; } 输入: 30 输出: _______________ 3. #include usingnamespacestd; constintV=100; intn,m,ans,e[V][V]; boolvisited[V]; voiddfs(intx,intlen) { inti; visited[x]=true; if(len>ans) ans=len; for(i=1;i<=n;i++) if((! visited[i])&&(e[x][i]! =-1)) dfs(i,len+e[x][i]); visited[x]=false; } intmain() { inti,j,a,b,c; cin>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++) e[i][j]=-1; for(i=1;i<=m;i++) { cin>>a>>b>>c; e[a][b]=c; e[b][a]=c; } for(i=1;i<=n;i++) visited[i]=false; ans=0; for(i=1;i<=n;i++) dfs(i,0); cout< return0; } 输入: 46 1210 2320 3430 4140 1350 2460 输出: ______________ 4. #include #include #include usingnamespacestd; constintSIZE=10000; constintLENGTH=10; intn,m,a[SIZE][LENGTH]; inth(intu,intv) { intans,i; ans=0; for(i=1;i<=n;i++) if(a[u][i]! =a[v][i]) ans++; returnans; } intmain() { intsum,i,j; cin>>n; memset(a,0,sizeof(a)); m=1; while (1) { i=1; while((i<=n)&&(a[m][i]==1)) i++; if(i>n) break; m++; a[m][i]=1; for(j=i+1;j<=n;j++) a[m][j]=a[m-1][j]; } sum=0; for(i=1;i<=m;i++) for(j=1;j<=m;j++) sum+=h(i,j); cout< return0; } 输入: 7 输出: _________ 5.完善程序(第1题,每空2分,第2题,每空3分,共28分) 1.(大整数开方)输入一个正整数n(1≤n≤10100),试用二分法计算它的平方根的整数部分。 #include #include usingnamespacestd; constintSIZE=200; structhugeint{ intlen,num[SIZE]; }; //其中len表示大整数的位数;num[1]表示个位,num[2]表示十位,以此类推 hugeinttimes(hugeinta,hugeintb) //计算大整数a和b的乘积 { inti,j; hugeintans; memset(ans.num,0,sizeof(ans.num)); for(i=1;i<=a.len;i++) for(j=1;j<=b.len;j++) ①+=a.num[i]*b.num[j]; for(i=1;i<=a.len+b.len;i++){ ans.num[i+1]+=ans.num[i]/10; ②; } if(ans.num[a.len+b.len]>0) ans.len=a.len+b.len; else ans.len=a.len+b.len-1; returnans; } hugeintadd(hugeinta,hugeintb) //计算大整数a和b的和 { inti; hugeintans; memset(ans.num,0,sizeof(ans.num)); if(a.len>b.len) ans.len=a.len; else ans.len=b.len; for(i=1;i<=ans.len;i++){ ans.num[i]+=③; ans.num[i+1]+=ans.num[i]/10; ans.num[i]%=10; } if(ans.num[ans.len+1]>0) ans.len++; returnans; } hugeintaverage(hugeinta,hugeintb) //计算大整数a和b的平均数的整数部分 { inti; hugeintans; ans=add(a,b); for(i=ans.len;i>=2;i--){ ans.num[i-1]+=(④)*10; ans.num[i]/=2; } ans.num[1]/=2; if(ans.num[ans.len]==0) ans.len--; returnans; } hugeintplustwo(hugeinta) //计算大整数a加2之后的结果 { inti; hugeintans; ans=a; ans.num[1]+=2; i=1; while((i<=ans.len)&&(ans.num[i]>=10)){ ans.num[i+1]+=ans.num[i]/10; ans.num[i]%=10; i++; } if(ans.num[ans.len+1]>0) ⑤; returnans; } boolover(hugeinta,hugeintb) //若大整数a>b则返回true,否则返回false { inti; if(⑥) returnfalse; if(a.len>b.len) returntrue; for(i=a.len;i>=1;i--){ if(a.num[i] returnfalse; if(a.num[i]>b.num[i]) returntrue; } returnfalse; } intmain() { strings; inti; hugeinttarget,left,middle,right; cin>>s; memset(target.num,0,sizeof(target.num)); target.len=s.length(); for(i=1;i<=target.len;i++) target.num[i]=s[target.len-i]-⑦; memset(left.num,0,sizeof(left.num)); left.len=1; left.num[1]=1; right=target; do{ middle=average(left,right); if(over(⑧)) right=middle; else left=middle; }while(! over(plustwo(left),right)); for(i=left.len;i>=1;i--) cout< return0; } 2.(笛卡尔树)对于一个给定的两两不等的正整数序列,笛卡尔树是这样的一棵二叉树: 首先,它是一个最小堆,即除了根结点,每个节点的权值都大雨父节点的权值;其次,它的中序遍历恰好就是给定的序列。 例如,对于序列7、2、12、1、10、5、15、3,下图就是一棵对应的笛卡尔树。 现输入序列的规模n(1≤n<100)和序列的n个元素,试求其对应的笛卡尔树的深度d(根节点深度为1),以及有多少个叶子节点的深度为d。 #include usingnamespacestd; constintSIZE=100+5; constintINFINITY=1000000; intn,a[SIZE],maxDeep,num; voidsolve(intleft,intright,intdeep) { inti,j,min; if(deep>maxDeep){ maxDeep=deep; num=1; } elseif(deep==maxDeep) ①; min=INFINITY; for(i=left;i<=right;i++) if(min>a[i]){ min=a[i]; ②; } if(left ③; if(j ④; } intmain() { inti; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; maxDeep=0; solve(1,n,1); cout< return0; } NOIP2011年提高组(C++语言)参考答案与评分标准 一、单项选择题: (每题1.5分) 1.B2.B3.A4.D5.B 6.A7.C8.D9.B10.A 二、不定项选择题(共10题,每题1.5分,共计15分。 每题正确答案的个数大于或等于1。 多选或少选均不得分)。 1.CD2.ABCD3.AB4.BC5.BC 6.ABD7.CD8.A9.BCD10.ABC 三、问题求解: (共2题,每空5分,共计10分) 1.9 2.4 四、阅读程序写结果(共4题,每题8分,共计32分) 1.3 2.1251334 3.150 4.57344 五、完善程序(第1题,每空2分,第2题,每空3分,共计28分) (说明: 以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1. ①ans.num[i+j-1] ②ans.num[i]=ans.num[i]mod10 ③a.num[i]+b.num[i] ④ans.num[i]%2(或ans.num[i]&1) ⑤ans.len++(或ans.len=ans.len+1) ⑥a.len ⑦'0'(或48) ⑧times(middle,middle),target 2. ①num++(或num=num+1) ②j=i ③solve(left,j-1,deep+1) ④solve(j+1,right,deep+1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NOIP 提高 初赛 试题 答案 C+