推荐NOIP20XX提高组初赛及答案Pascal 精品.docx

上传人:b****3 文档编号:27129575 上传时间:2023-06-27 格式:DOCX 页数:21 大小:599.39KB
下载 相关 举报
推荐NOIP20XX提高组初赛及答案Pascal 精品.docx_第1页
第1页 / 共21页
推荐NOIP20XX提高组初赛及答案Pascal 精品.docx_第2页
第2页 / 共21页
推荐NOIP20XX提高组初赛及答案Pascal 精品.docx_第3页
第3页 / 共21页
推荐NOIP20XX提高组初赛及答案Pascal 精品.docx_第4页
第4页 / 共21页
推荐NOIP20XX提高组初赛及答案Pascal 精品.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

推荐NOIP20XX提高组初赛及答案Pascal 精品.docx

《推荐NOIP20XX提高组初赛及答案Pascal 精品.docx》由会员分享,可在线阅读,更多相关《推荐NOIP20XX提高组初赛及答案Pascal 精品.docx(21页珍藏版)》请在冰豆网上搜索。

推荐NOIP20XX提高组初赛及答案Pascal 精品.docx

推荐NOIP20XX提高组初赛及答案Pascal精品

第十八届全国青少年信息学奥林匹克联赛初赛

(提高组Pascal语言试题)

竞赛时间:

20XX年10月13日14:

30~16:

30

选手注意:

●试题纸共有10页,答题纸共有2页,满分100分。

请在答题纸上作答,写在试题纸上一律无效。

●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料

一、单项选择题(共10题,每题1.5分,共计15分;每题有且仅有一个正确选项)

1.目前计算机芯片(集成电路)制造的主要原料是(),它是一种可以在沙子中提炼出的物质。

A.硅B.铜C.锗D.铝

2.()是主要用于显示网页服务器或者文件系统的文件的内容,并让用户与这些文件交互的一种软件。

A.资源管理器B.浏览器C.电子邮件D.编译器

3.目前个人电脑的()市场占有率最靠前的厂商包括Intel、AMD等公司。

A.显示器B.CPUC.内存D.鼠标

4.无论是TCP/IP模型还是OSI模型,都可以视为网络的分层模型,每个网络协议都会被归入某一层中。

如果用现实生活中的例子来比喻这些“层”,以下最恰当的是()。

A.中国公司的经理与波兰公司的经理交互商业文件

B.军队发布命令

C.国际会议中,每个人都与他国地位对等的人直接进行会谈

D.体育比赛中,每一级比赛的优胜者晋级上一级比赛

5.如里不在快速排序中引入随机化,有可能导致的后果是()。

A.数组访问越界B.陷入死循环

C.排序结果错误D.排序时间退化为平方级

6.1946年诞生于美国宾夕法尼亚大学的ENIAC属于()计算机。

A.电子管B.晶体管C.集成电路D.超大规模集成电路

7.在程序运行过程中,如果递归调用的层数过多,会因为()引发错误。

A.系统分配的栈空间溢出B.系统分配的堆空间溢出

C.系统分配的队列空间溢出D.系统分配的链表空间溢出

8.地址总线的位数决定了CPU可直接寻址的内存空间大小,例如地址总线为16位,其最大的可寻址空间为64KB。

如果地址总线是32位,则理论上最大可寻址的内存空间为()。

A.128KBB.1MBC.1GBD.4GB

9.以下不属于3G(第三代移动通信技术)标准的是()。

A.GSMB.TD-SCDMAC.CDMA2000D.WCDMA

10.仿生学的问世开辟了独特的科学技术发展道路。

人们研究生物体的结构、功能和工作原理,并将这些原理移植于新兴的工程技术中。

以下关于仿生学的叙述,错误的是()

A.由研究蝙蝠,发明雷达B.由研究蜘蛛网,发明因特网

C.由研究海豚,发明声纳D.由研究电鱼,发明伏特电池

二、不定项选择题(共10题,每题1.5分,共计15分;每题有一个或多个正确选项,多选或少选均不得分)

1.如果对于所有规模为n的输入,一个算法均恰好进行()次运算,我们可以说该算法的时间复杂度为

A.

B.

C.

D.

2.从顶点

出发,对有向图()进行广度优先搜索(BFS)时,一种可能的遍历顺序是

3.如果一个栈初始时为空,且当前栈中的元素从栈顶到栈底依次为a,b,c(如右图所示),另有元素d已经出栈,则可能的入栈顺序是()。

A.a,b,c,dB.b,a,c,d

C.a,c,b,dD.d,a,b,c

4.在计算机显示器所使用的RGB颜色模型中,()属于三原色之一。

A.黄色B.蓝色C.10D.15

5.一棵二叉树一共有19个节点,其叶子节点可能有()个。

A.1B.9C.紫色D.绿色

6.已知带权有向图G上的所有权值均为正整数,记顶点u到顶点v的最短路径的权值为

是图G上的顶点,且它们之间两两都存路径可达,则以下说法正确的有()。

A.

的最短路径可能包含一个环

B.

C.

D.如果

的一条最短路径,那么

的一条最短路径

7.逻辑异或(

)是一种二元运算,其真值表如下所示。

a

b

False

False

False

False

True

True

True

False

True

True

True

Flase

以下关于逻辑异或的性质,正确的有()。

A.交换律:

B.结合律:

C.关于逻辑与的分配律:

D.关于逻辑或的分配律:

8.十进制下的无限循环小数(不包括循环节内的数字均为0成均为9的平凡情况),在二进制下有可能是()。

A.无限循环小数(不包括循环节内的数字均为0或均为9的平凡情)

B.无限不循环小数C.有限小数D.整数

9.()是目前互联网上常用的E-mail服务协议。

A.HTTPB.FTPC.POP3D.SMTP

10.以下关于计算复杂度的说法中,正确的有()。

A.如果一个问题不存在多项式时间的算法,那它一定是NP类问题

B.如果一个问题不存在多项式时间的算法,那它一定不是P类问题

C.如果一个问题不存在多项式空间的算法,那它一定是NP类问题

D.如果一个问题不存在多项式空间的算法,那它一定不是P类问题

三、问题求解(共2题,每题5分,共计10分)

1.本题中,我们约定布尔表达式只能包含p,q,r三个布尔变量,以及“与”(∧)、“或”(∨)、“非”(¬)三种布尔运算。

如果无论p,q,r如何取值,两个布尔表达式的值总是相同,则称它们等价。

例如(p∨q)∨r和p∨(q∨r)等价,p∨¬p和q∨¬q也等价;而p∨q和p∧q不等价。

那么两两不等价的布尔表达式最多有个。

2.对于一棵二叉树,独立集是指两两互不相邻的节点构成的集合。

例如,图1有5个不同的独立集(1个双点集合,3个单点集合、1个空集),图2有14个不同的独立集。

那么图3有个不同的独立集。

三、阅读程序写结果。

(共4题,每题8分,共计32分)

1.

var

n,i,temp,sum:

integer;

a:

array[1..100]ofinteger;

begin

readln(n);

fori:

=1tondo

read(a[i]);

fori:

=1ton-1do

ifa[i]>a[i+1]then

begin

temp:

=a[i];

a[i]:

=a[i+1];

a[i+1]:

=temp;

end;

fori:

=ndownto2do

ifa[i]

begin

temp:

=a[i];

a[i]:

=a[i-1];

a[i-1]:

=temp;

end;

sum:

=0;

fori:

=2ton-1do

inc(sum,a[i]);

writeln(sumdiv(n-2));

end.

输入:

8

4070507020401030

输出:

______________

2.

var

n,i,ans:

integer;

functiongcd(a,b:

integer):

integer;

begin

ifamodb=0

thengcd:

=0;

elsegcd:

=gcd(b,amodb);

end;

begin

readln(n);

ans:

=0;

fori:

=1tondo

ifgcd(n,i)=i

thenans:

=ans+1;

writeln(ans);

end.

输入:

120

输出:

_____________

3.

var

data:

array[1..20]ofinteger;

n,i,h,ans:

integer;

proceduremerge;

begin

data[h-1]:

=data[h-1]+data[h];

dec(h);

inc(ans);

end;

begin

readln(n);

h:

=1;

data[h]:

=1;

ans:

=0;

fori:

=2tondo

begin

inc(h);

data[h]:

=1;

while(h>1)and(data[h]=data[h-1])do

merge;

end;

writeln(ans);

end.

(1)

输入:

8

输出:

______________(4分)

(2)

输入:

20XX

输出:

______________(4分)

4.

var

left,right,father:

array[1..20]ofinteger;

sl,s2,s3:

string;

n,ana:

integer;

procedurecheck(x:

integer);

begin

ifleft[x]>0thencheck(left[x));

s3:

=s3+sl[x];

ifright[x]>0thencheck(right[x]);

end;

procedurecalc(x,dep:

integer);

begin

ans:

=ans+dep*(ord(sl[x])-ord('A')+1);

ifleft[x]>0thencalc(left[x],dep+l);

ifright[x]>0thencalc(right[x),dep+l);

end;

proceduredfs(x,th:

integer);

begin

ifth=n+1then

begin

s3:

='';

check

(1);

ifs2=s3then

begin

ans:

=0;

calc(1,1);

writeln(ans);

end;

exit;

end;

if(left[x]=0)and(right[x]=0)then

begin

left[x):

=th;

father[th]:

=x;

dfs(th,th+1);

father[th]:

=0;

left[x]:

=0;

end;

ifright[x]=0then

begin

right[x]:

=th;

father[th]:

=X;

dfs(th,th+1);

father[th]:

=0;

right[x]:

=0;

end;

if(father[x]>0)then

dfs(father[x],th);

end;

begin

readln(s1);

readln(s2);

n:

=length(s1);

fillchar(left,sizeof(left),0);

fillchar(right,sizeof(right),0);

fillcahr(father,sizeof(father),0);

dfs(1,2);

end.

输入:

ABCDEF

BCAEDF

输出:

____________

五、完善程序(第1题第2空3分,其余每空2.5分,共计28分)

1.(排列数)输入两个正整数

,在

中任取

个数,按字典序从小到大输出所有这样的排列。

例如

输入:

32

输出:

12

13

21

23

31

32

const

SIZE=20;

var

used:

array[1..SIZE]ofboolean;

data:

array[1..SIZE]ofinteger;

n,m,i,j,k:

integer;

flag:

boolean;

begin

readln(n,m);

fillchar(used,sizeof(used),false);

fori:

=1tomdo

begin

data[i]:

=i;

used[i]:

=true;

end;

flag:

=true;

whileflagdo

begin

fori:

=1tom-1dowrite(data[i],'');

writeln(data[m]);

flag:

=①;

fori:

=mdownto1do

begin

②;

forj:

=data[i]+1tondoifused[j]=falsethen

begin

used[j]:

=true;

data[i]:

=③;

flag:

=true;

break;

end;

ifflagthen

begin

fork:

=i+ltomdo

forj:

=1to④doifused[j]=falsethen

begin

data[k]:

=j;

used[j]:

=true;

break;

end;

⑤;

end;

end;

end;

end.

2.(新壳栈)小Z设计了一种新的数据结构“新壳栈”。

首先,它和传统的栈一样支持压入、弹出操作。

此外,其栈顶的前c个元素是它的壳,支持翻转操作。

其中,c>2是一个固定的正整数,表示壳的厚度。

小Z还希望,每次操作,无论是压入、弹出还是翻转,都仅用与c无关的常数时间完成。

聪明的你能帮助她编程实现“新壳栈”吗?

程序期望的实现效果如以下两表所示。

其中,输入的第一行是正整数c,之后每行输入都是一条指令。

另外,如遇弹出操作时栈为空,或翻转操作时栈中元素不足c个,应当输出相应的错误信息。

指令

涵义

1[空格]e

在栈顶压入元素e

2

弹出(并输出)栈顶元素

3

翻转栈顶的前c个元素

0

退出

表1:

指令的涵义

输入

输出

栈中的元素

(左为栈底,右为栈顶)

说明

3

输入正整数c

11

1

压入元素1

12

12

压入元素2

13

123

压入元素3

14

1234

压入元素4

3

1432

翻转栈顶的前c个元素

15

14325

压入元素5

3

14523

翻转栈顶的前c个元素

2

3

1452

弹出栈顶元素3

2

2

145

弹出栈顶元素2

2

5

14

弹出栈顶元素5

3

错误信息

14

由于栈中元素不足c个,无法翻转,故操作失败,输出错误信息

2

4

1

弹出栈顶元素4

2

1

弹出栈顶元素1

2

错误信息

由于栈中元素不足c个,无法翻转,故操作失败,输出错误信息

0

退出

表2:

输入输出样例

const

NSIZE=100000;

CSIZE=1000;

var

n,c,r,tail,head:

longint;

s:

array[1..NSIZE]oflongint;

//数组s模拟一个栈,n为栈的元素个数

q:

array[1..CSIZE]oflongint;

//数组q模拟一个循环队列,tail为队尾的下标,head为队头的下标

direction,empty:

boolean;

functionprevious(k:

longint):

longint;

begin

ifdirectionthen

previous:

=((k+c-2)modc)+1;

else

previous:

=(kmodc)+1;

end;

functionnext(k:

longint):

longint;

begin

ifdirectionthen

else

next:

=((k+c-2)modc)+1;

end;

procedurepush;

var

element:

longint;

begin

read(element);

ifnext(head)=tailthen

begin

inc(n);

②;

tail:

=next(tail);

end;

ifemptythen

empty:

=false

else

head:

=next(head);

③:

=element;

end;

procedurepop;

begin

ifemptythen

begin

writeln('Error:

thestackisempty!

');

exit;

end:

writeln(④);

iftail=headthen

empty:

=true

else

begin

head:

=previous(head);

ifn>0then

begin

tail:

=previous(tail);

⑤:

=s[n];

dec(n);

end;

end;

end;

procedurereverse;

var

temp:

longint;

begin

if⑥=tailthen

begin

direction:

=notdirection;

temp:

=head;

head:

=tail;

tail:

=temp;

endelse

writeln('Error:

lessthan',c,'elementsinthestack!

');

end;

begin

readln(c);

n:

=0;

tail:

=1;

head:

=1;

empty:

=true;

direction:

=true;

repeat

read(r);

caserof

1:

push;

2:

pop;

3:

reverse;

end;

untilr=0;

end.

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

当前位置:首页 > 总结汇报 > 学习总结

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

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