=b[i]+1;
j:
=j+1;
END;
IFb[i]=mTHEN
BEGINwriteln('a(',i,')=',a[i]);fd:
=TRUE;END;
i:
=i+1;
END;
END.
输入:
Inputn:
10
Inputm:
3
Input10Data:
1657201938416132532
程序运行的结果是:
4.PROGRAMp4;
TYPE
LINKLIST=^ITEM;
ITEM=RECORD
data:
INTEGER;
next:
LINKLIST;
END;
VAR
head,temp,tail:
LINKLIST;
i:
INTEGER;
BEGIN
writeln(‘INPUTDATA,0TOEND:
’);
head:
=NIL;
read(i);
WHILEi<>0DO
BEGIN
new(temp);
WITHtemp^DO
BEGIN
data:
=i*i;
next:
=NIL;
END;
IFhead=NILTHEN
BEGIN
head:
=temp;
tail:
=temp;
END
ELSE
BEGIN
tail^.next:
=temp;
tail:
=temp;
END;
read(i);
END;
readln;writeln;
writeln(‘THELISTIS’);
temp:
=head;
WHILEtemp<>NILDO
BEGIN
write(temp^.data:
4);
temp:
=temp^.next;
END;
END.
输入:
123450
程序运行的结果是:
四、程序填空(每空2分,共28分)
请阅读下列各题的题意及程序,并将程序的空缺部分填空完善,填空的内容写在答题卷相应位置上,答在试卷上不得分。
1.问题描述:
由二叉树的前序遍历和中序遍历两个遍历序列能唯一确定一棵二叉树。
前序遍历为:
访问根结点、访问左子树、访问右子树;
中序遍历为:
访问左子树、访问根结点、访问右子树。
如右图所示的二叉树,其前序和中序遍历序列分别为:
hnod[ ]:
A、B、D、E、C、F、G。
inod[ ]:
D、B、E、A、C、G、F。
本程序实现已知某二叉树的前序遍历和中序遍历序列,生成一棵链接表示的二叉树,再输出其后序遍历序列。
【程序】PROGRAMcx1;
CONSTmax=100;
TYPEtpointer=^tnode;
tnode=RECORD
info:
CHAR;
llink,rlink:
tpointer;
END;
VAR
hnod,inod:
ARRAY[0..max]OFCHAR;
root:
tpointer;
i,n,r,s:
INTEGER;
FUNCTIONrestore(ppos,ipos,n:
INTEGER):
tpointer;
VARptr:
tpointer;
rpos:
integer;
k,i:
INTEGER;
BEGIN
IF(n<=0)THEN
BEGINrestore:
=NIL;EXIT;END;
NEW(ptr);
ptr^.info:
=①;
FOR②TOipos+n-1DO
BEGIN
IF(inod[rpos]=hnod[ppos])THENBREAk;
END;
k:
=③;
ptr^.llink:
=restore(ppos+1,④,k);
ptr^.rlink:
=restore(⑤+k,⑥+1,n-1-k);
restore:
=ptr;
END;
PROCEDUREpostorder(ptr:
tpointer);
BEGIN
IF(ptr=NIL)THENEXIT;
postorder(ptr^.llink);
postorder(ptr^.rlink);
WRITE(ptr^.info);
END;
BEGIN
WRITELN('Inputqianxuxulie:
');
i:
=0;
READ(hnod[i]);
WHILEhnod[i]<>CHR(13)DO
BEGIN
i:
=i+1;READ(hnod[i]);
END;
n:
=i;
writeln('Inputhouxuxulie:
');
i:
=0;
readln;
READ(inod[i]);
WHILEinod[i]<>CHR(13)DO
BEGIN
i:
=i+1;READ(inod[i]);
END;
r:
=0;s:
=0;
root:
=restore(r,s,n);
⑦;
writeln;
END.
2、问题描述:
学校放寒假时,信息学竞赛辅导教师有A、B、C、D、E共5本书,要分给参加培训的张、王、刘、孙、李5位学生,已知张同学喜爱C和D两本书,王同学喜爱A、B和E三本书,刘同学喜爱B和C两本书,孙同学喜爱D这本书,李同学喜爱B和E两本书,每人只能选1本书。
本程序帮助教师求出所有可能的分书方案,使每个学生都满意。
【程序】PROGRAMcx2;
CONST
like:
ARRAY[1..5,0..5]OFBYTE=((3,0,0,4,0,0),(1,2,5,0,0,0),(2,0,3,0,0,0),(4,0,0,0,0,0),(2,0,5,0,0,0));
name:
ARRAY[1..5]OFSTRING[6]=('zhang','wang','liu','sun','li');
VAR
book:
ARRAY[1..5]OF0..5;
flag:
SETOF1..5;
c:
INTEGER;
PROCEDUREprint;
VAR
i:
INTEGER;
BEGIN
①;
writeln('Answer',c,':
');
FORi:
=1TO5DO
writeln(name[i]:
10,':
',char(64+②));
END;
PROCEDUREtry(i:
INTEGER);
VAR
j:
INTEGER;
BEGIN
IFbook[i]>0THEN
IFi=5THENprint
ELSE③
ELSE
BEGIN
j:
=like[i,0];
WHILEj<>0DO
BEGIN
IF④THEN
BEGIN
flag:
=flag+[j];book[i]:
=j;
IFi=5THENprintELSEtry(i+1);
flag:
=⑤;book[i]:
=0
END;
j:
=⑥;
END
END
END;
BEGIN
flag:
=[4];book[4]:
=⑦;c:
=0;try
(1);readln
END.
宁波市第23届中小学生计算机程序设计竞赛初赛试题答题卷
(高中组)
学校姓名准考证号
一、选择题(每小题2分,共40分)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
18
20
二、问题解答(每小题10分,共20分)
1.答:
2.答
三、阅读程序,并写出程序的正确运行结果(每小题8分,共32分)
1、程序运行结果:
2、程序运行结果:
3、程序运行结果:
4、程序运行结果:
四、程序填空(每空2分,共28分)
1、①②
③④
⑤⑥
⑦
2、①②③
④⑤⑥
⑦