衢州市青少年信息学竞赛选拔赛试题.docx
《衢州市青少年信息学竞赛选拔赛试题.docx》由会员分享,可在线阅读,更多相关《衢州市青少年信息学竞赛选拔赛试题.docx(13页珍藏版)》请在冰豆网上搜索。
衢州市青少年信息学竞赛选拔赛试题
衢州市青少年信息学竞赛选拔赛试题
2007年衢州市青少年信息学竞赛选拔赛试题
一、选择题(下列每小题只有一个正确答案,多选不选均不给分,每小题3分,共30分)
1.不同类型的存储器组成了多层次结构的存储器体系,按存取速度从快到慢的排列是
(A)寄存/辅存/主存(B)外存/主存/辅存
(C)寄存/主存/辅存(D)主存/寄存/外存
2.李老师要把一篇论文用电子邮件的方式寄给杂志社,可是李老师只有该论文的打印稿,为了最快地从论文的打印稿得到电子稿,可以采用的输入设备是()
(A)键盘
(B)MOUSE
(C)扫描仪
(D)手写板
3.下列无符号数中,最小的数是
(A)(37)8(B)(75)10(C)()2(D)(2A)16
4.在机关工作的小王想学习网页制作技术,你向他推荐的软件是()
(A)Word
(B)Excel
(C)FrontPage
(D)Photoshop
5.小赵用下列方法制作的一张图片,可能是矢量图的是()
(A)数码相机拍摄了一张图
(B)扫描仪器扫描一张图
(C)在Flash软件中画了一张图
(D)在Photoshop中画了一张图
6.高度为n的均衡的二叉树是指:
如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。
在这里,树高等于叶结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为()
(A)10(B)11(C)12(D)13
7.已知6个结点的二叉树的先根遍历是123456(数字为结点的编号,以下同),后根遍历是325641,则该二叉树的可能的中根遍历是()
(A)321465(B)321546
(C)213546(D)231465
8.已知数组A中,每个元素A[I,J]在存贮时要占3个字节,设I从1变化到8,J从1变化到10,分配内存时是从地址SA开始连续按行存贮分配的。
试问:
A[5,8]的起始地址为
(A)SA+141(B)SA+180(C)SA+222(D)SA+225
9.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是
(A)希尔排序(B)起泡排序(C)插入排序(D)选择排序
10.下列叙述中,正确的是
(A)线性表的线性存贮结构优于链表存贮结构
(B)队列的操作方式是先进后出
(C)栈的操作方式是先进先出
(D)二维数组是指它的每个数据元素为一个线性表的线性表
二、算法分析与公式推导(每小题5分,本题满分10分)
1.选择排序的算法是:
首先找出关键字值最小的记录,然后把这个记录与第一个位置上的记录对换。
这样,就使关键字值最小的记录取得了应占的位置。
接着,再在余下的记录中找关键字值最小的记录,并把它与第二个位置上的记录对换,使关键字值第二小的记录取得了应占的位置。
依次类推,一直到所有的记录都处在它应占的位置上,便得到了按关键字值非减次序排序的有序文件。
如果有n个数据,按上述方法排序,总的比较次数为。
2.已知一个由n个元素构成的集合,求由该集合的所有子集合作元素构成的集合(幂集)。
例如n=3,可得集合A=[1,2,3],A的幂集为B=[⊙,[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]共8个元素。
则n个元素的集合的幂集元素个数为:
。
三、程序填空(初中学生做1,2,3,4,5;高中学生做1,2,3,6,7,每空3分,本题满分60分)
1.用递归计算m与n的最大公约数。
程序:
Programgmn(input,output);
Var
n,n,g:
integer;
Functionmaxg(m,n:
integer):
integer;
Ifn=0
Thenmaxg:
=m
Elsemaxg:
=
(1)
End;
Begin
read(m,n);
g:
=
(2);
Writeln(‘m=’,m,’n=’,n,’maxg=’,g)
End.
2.(全排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数的全部可能的排列(不一定按升序输出)。
例如,输入3,则应该输出(每行输出5个排列):
123132213231321
312
程序:
Programex401;
Var
i,n,k:
integer;
a:
array[1..10]ofinteger;
count:
longint;{变量count记录不同排列的个数,这里用于控制换行}
Procedureperm(k:
integer);
varj,p,t:
integer;
begin
if(3)then
begin
inc(count);
forp:
=1tokdo
write(a[p]:
1);
write('');
if(4)thenwriteln;
exit;
end;
forj:
=ktondo
begin
t:
=a[k];a[k]:
=a[j];a[j]:
=t;
(5);
t:
=a[k];(6);
end
end;
begin
writeln('Entryn:
');
read(n);
count:
=0;
fori:
=1tondoa[i]:
=i;
(7);
end.
3.中国象棋棋盘如下图。
马自左下角A跳到右上角B。
今规定马只走日字,且只允许往右跳,不许往左跳。
如图所示,为一种跳行路线。
找出一条从A到B的路径。
B
A
程序清单:
programex(input,output);
varx,y,m,k,i:
integer;
b:
array[0..8]ofinteger;
dx,dy:
array[1..4]ofinteger;
begin
x:
=0;y:
=0;
m:
=0;k:
=0;
dx[1]:
=1;dy[1]:
=-2;
dx[2]:
=2;dy[2]:
=-1;
dx[3]:
=2;dy[3]:
=1;
dx[4]:
=1;dy[4]:
=2;
fori:
=0to8do
b[i]:
=0;
while(x<>8)or(<>4)do
begin
k:
=k+1;
ifk>4then
begin
k:
=b[m];
m:
=m-1;
(8);
y:
=y-dy[k]
end;
else
begin
x:
=x+dx[k];
(9);
if(x>8)or(y<0)or(y>4)then
begin
x:
=x-dx[k];
y:
=y-dy[k]
end;
else
begin
m:
=m+1;
(10);
(11)
end
end
end;
fori:
=1tomdo
write(b[i]:
3);
writeln
end.
4.快速排序
快速排序的基本思想是:
元素的比较和交换是从两端向中间进行的,关键字大的元素一次就能够交换到后面的单元,关键字小的元素一次就能够交换到前面的单元,然后将数组元素分成两个单元,对每一个单元也采用相同的方法,直到每一单元只有一个元素为止。
程序清单:
constmax=30;
type
node=record
key:
integer;
data:
integer;
end;
sarray=array[0..max]ofnode;
varn,i:
integer;
p:
sarray;
procedurequicksort(vara:
sarray;s,t:
integer);
vari,j:
integer;x:
node;
begin
i:
=s;j:
=t;x:
=a[s];
while(12)do
begin
while(a[j].key>=and(j>i)do(13);
ifj>ithen
begin
(14);i:
=i+1;
end;
while(a[j].key>=and(i=i+1;
ifibegin
a[j]:
=a[i];j:
=j-1;
end;
(15)
end;
ifsifi+1end;
begin
read(n);
fori:
=1tondoread(p[i].key);
quicksort(p,1,n);
fori:
=1tondowrite(p[i].key,'');
writeln;
end.
5.平面直线交点问题
在平面上有n条直线,且无三线共点,问这些直线能有多少种不同的交点数。
例:
n(直线数)p(交点数)
10
20,1
30,2,3
……
程序清单:
programa5;
constmax=200;
varn,k,i,total:
integer;
a:
array[0..max]ofboolean;
proceduretry(m,j:
integer);
varp:
integer;
begin
ifm>0thenforp:
=mdownto1dotry(m-p,j+p*(m-p))
elsea[j]:
=true;
end;
begin
repeat
writeln('n=',n);
readln(n);
(16);
until(17);
fori:
=0tokdo(18);
try(n,0);
(19);
fori:
=0tokdo
if(20)thenbegin
inc(total);
writeln('[',total,']',i);
end;
end.
6.背包问题
设有n种物品,每种物品有一个重量及一个价值,但每种物品的数量是无限的,同时有一个背包,最大载重量为Xk。
现从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于Xk,而价值的和为最大。
程序清单:
programpackage;
const
maxxk=400;
maxn=20;
fname='';
type
tlist=array[1..maxn]ofbyte;
tmake=array[0..maxn,0..maxxk]ofinteger;
var
n,xk:
integer;
w,u:
tlist;
f:
tmake;
procedureinit;
varf:
text;i:
byte;
begin
fillchar(w,sizeof(w),0);
fillchar(u,sizeof(u),0);
assign(f,fname);
reset(f);
readln(f,n,xk);
fori:
=1tondoread(f,w[i]);
fori:
=1tondoread(f,u[i]);
close(f);
end;
proceduremake;
vari,j:
byte;
begin
fillchar(f,sizeof(f),0);
fori:
=1tondo
begin
forj:
=1tow[i]-1dof[i,j]:
=f[i-1,j];
forj:
=w[i]to(21)do
iff[i-1,j]>f[i,j-w[i]]+u[i]thenf[i,j]:
=f[i-1,j]
elsef[i,j]:
=(22);
end;
end;
procedureprint;
varget:
tlist;
i,j:
byte;
begin
fillchar(get,sizeof(get),0);
i:
=n;(23);
whilei>0do
iff[i,j]=f[i-1,j]
thendec(i)
else
begin
dec(j,w[i]);
inc(get[i]);
end;
writeln('n=',n,'xk=',xk);
writeln('maxworth=',f[n,xk]);
fori:
=1tondo
writeln('No.',i,'Get',get[i]);
end;
begin
init;
(24);
print;
end.
7.拓扑排序
中学生要参加信息学奥林匹克竞赛,要学习几门功课,但功课之间的先行与后学的关系如下:
代号课程名称先行课程
C1英语基础无
C2数学基础无
C3离散数学C2
C4计算机基础知识C1,C2
C5程序设计基础C1,C2
C6Pascal语言程序设计C1,C2,C4,C5
C7数据结构C2,C6
C8算法设计C2,C6,C7
C9人工智能C2,C5,C8
C10运筹学C2,C8
设计程序,排列出学习各门功课的先后次序。
程序清单:
constmax=20;
typelink=^node;
node=record
vex:
0..max;
next:
link;
end;
adjelist=array[1..max]ofnode;
varr:
adjelist;t,i:
integer;
p,s:
link;
proceduretoporder(varal:
adjelist;n:
integer);
vari,j,k,top:
integer;
q:
link;
begin
top:
=0;
fori:
=1tondo
ifal[i].vex=0then
begin
al[i].vex:
=top;
top:
=i;
end;
i:
=0;
while(25)do
begin
j:
=top;
top:
=al[top].vex;
write('---V',j:
2);
i:
=i+1;
(26);
whileq<>nildo
begin
(27);
al[k].vex:
=al[k].vex-1;
ifal[k].vex=0then
begin
(28);
top:
=k;
end;
(29);
end;
writeln;
end;
ifithisnetwork,hasacycle!
')
elsewriteln('Yes!
');
end;