NOIP提高组初赛试题C++含答案Word文档下载推荐.docx

上传人:b****7 文档编号:22208429 上传时间:2023-02-03 格式:DOCX 页数:18 大小:115.08KB
下载 相关 举报
NOIP提高组初赛试题C++含答案Word文档下载推荐.docx_第1页
第1页 / 共18页
NOIP提高组初赛试题C++含答案Word文档下载推荐.docx_第2页
第2页 / 共18页
NOIP提高组初赛试题C++含答案Word文档下载推荐.docx_第3页
第3页 / 共18页
NOIP提高组初赛试题C++含答案Word文档下载推荐.docx_第4页
第4页 / 共18页
NOIP提高组初赛试题C++含答案Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

NOIP提高组初赛试题C++含答案Word文档下载推荐.docx

《NOIP提高组初赛试题C++含答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《NOIP提高组初赛试题C++含答案Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

NOIP提高组初赛试题C++含答案Word文档下载推荐.docx

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<

iostream>

cstring>

usingnamespacestd;

constintSIZE=100;

intmain()

{

intn,i,sum,x,a[SIZE];

cin>

>

n;

memset(a,0,sizeof(a));

for(i=1;

i<

=n;

i++){

x;

a[x]++;

}

i=0;

sum=0;

while(sum<

(n/2+1)){

i++;

sum+=a[i];

cout<

<

endl;

return0;

}

输入:

11

45664332321

输出:

2.

intn;

voidf2(intx,inty);

voidf1(intx,inty)

if(x<

n)

f2(y,x+y);

voidf2(intx,inty)

x<

'

'

;

f1(y,x+y);

f1(0,1);

30

_______________

3.

constintV=100;

intn,m,ans,e[V][V];

boolvisited[V];

voiddfs(intx,intlen)

inti;

visited[x]=true;

if(len>

ans)

ans=len;

i++)

if((!

visited[i])&

&

(e[x][i]!

=-1))

dfs(i,len+e[x][i]);

visited[x]=false;

inti,j,a,b,c;

n>

m;

for(j=1;

j<

=m;

j++)

e[i][j]=-1;

{

a>

b>

c;

e[a][b]=c;

e[b][a]=c;

visited[i]=false;

ans=0;

dfs(i,0);

ans<

46

1210

2320

3430

4140

1350

2460

______________

4.

string>

constintSIZE=10000;

constintLENGTH=10;

intn,m,a[SIZE][LENGTH];

inth(intu,intv)

intans,i;

if(a[u][i]!

=a[v][i])

ans++;

returnans;

intsum,i,j;

m=1;

while

(1)

i=1;

while((i<

=n)&

(a[m][i]==1))

if(i>

break;

m++;

a[m][i]=1;

for(j=i+1;

a[m][j]=a[m-1][j];

sum+=h(i,j);

sum<

7

_________

五.完善程序(第1题,每空2分,第2题,每空3分,共28分)

1.(大整数开方)输入一个正整数n(1≤n≤10100),试用二分法计算它的平方根的整数部分。

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));

=a.len;

=b.len;

①+=a.num[i]*b.num[j];

=a.len+b.len;

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;

hugeintadd(hugeinta,hugeintb)

//计算大整数a和b的和

if(a.len>

b.len)

ans.len=a.len;

ans.len=b.len;

=ans.len;

ans.num[i]+=③;

ans.num[i+1]+=ans.num[i]/10;

ans.num[i]%=10;

if(ans.num[ans.len+1]>

ans.len++;

hugeintaverage(hugeinta,hugeintb)

//计算大整数a和b的平均数的整数部分

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--;

hugeintplustwo(hugeinta)

//计算大整数a加2之后的结果

ans=a;

ans.num[1]+=2;

=ans.len)&

(ans.num[i]>

=10)){

⑤;

boolover(hugeinta,hugeintb)

//若大整数a>

b则返回true,否则返回false

if(⑥)

returnfalse;

if(a.len>

b.len)

returntrue;

for(i=a.len;

=1;

if(a.num[i]<

b.num[i])

if(a.num[i]>

strings;

hugeinttarget,left,middle,right;

s;

memset(target.num,0,sizeof(target.num));

target.len=s.length();

=target.len;

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;

left=middle;

}while(!

over(plustwo(left),right));

for(i=left.len;

i--)

left.num[i];

2.(笛卡尔树)对于一个给定的两两不等的正整数序列,笛卡尔树是这样的一棵二叉树:

首先,它是一个最小堆,即除了根结点,每个节点的权值都大雨父节点的权值;

其次,它的中序遍历恰好就是给定的序列。

例如,对于序列7、2、12、1、10、5、15、3,下图就是一棵对应的笛卡尔树。

现输入序列的规模n(1≤n<

100)和序列的n个元素,试求其对应的笛卡尔树的深度d(根节点深度为1),以及有多少个叶子节点的深度为d。

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;

=right;

if(min>

a[i]){

min=a[i];

if(left<

j)

③;

if(j<

right)

④;

a[i];

maxDeep=0;

solve(1,n,1);

maxDeep<

num<

 

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分)

(说明:

以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)

①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<

b.len

⑦'

0'

(或48)

⑧times(middle,middle),target

①num++(或num=num+1)

②j=i

③solve(left,j-1,deep+1)

④solve(j+1,right,deep+1)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

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

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