发布时间 : 星期一 文章2015年宁波市第30届中小学生计算机程序设计竞赛-初中更新完毕开始阅读f04061a976eeaeaad0f33032
2015年宁波市第30届中小学生计算机程序设计竞赛初中组初赛试题
输入: 6 输出: 1 1 1 2 2 1 5 6 6 5 6 6 4.
var
a:array[1..20] of longint; f:Array[0..20000]of boolean; i,n:longint;
procedure dfs(t,sum:longint); begin
if t>n then begin
f[sum]:=true; exit; end;
dfs(t+1,sum); dfs(t+1,sum+a[t]); end; begin
readln(n); for i:=1 to n do read(a[i]); dfs(1 ,0);
for i:=1 to 20000 do
if not f[i] then break; writeln(i); end.
输入: 输出: 9 1 2 4 8 16 32 64 128 256
第5页 共8页
2015年宁波市第30届中小学生计算机程序设计竞赛初中组初赛试题
四.程序填空(前2空,每空2分,后8空,每空3分,共28分)
1.(螺旋矩阵) 一个n行m列的螺旋矩阵可由如下方法生成:从矩阵的左上角(第1行第1列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。输入n和m,输出一个螺旋矩阵,同一行中相邻两个数字中间有一个空格,行末没有空格。
输入: 4 4 输出: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
var
n, m, i, j, t, s:longint;
a:array[-1..11,-1..11] of longint; dx:array[1..4] of longint=(-1,0,0,1); dy:array[1..4] of longint=(0,-1,1,0); begin
readln(n,m);
i:=1; j:=1; t:=1; s:=1; a[i,j]:=t;
//t表示当前要填的数值,s表示当前填的方向;
while ① do begin inc(t);
i:=i+dx[s];
j:= ② ; if (i>n) or (i<1) or ( ③ ) or (j<1) or (a[i,j]<>0) then begin
i:=i-dx[s]; j:=j-dy[s]; dec(t); s:=s+1;
if s=5 then ④ ; continue; end;
a[i,j]:=t; end;
for i:=1 to n do begin
for j:=1 to m-1 do write(a[i,j],' '); writeln( ⑤ ); end; end.
第6页 共8页
2015年宁波市第30届中小学生计算机程序设计竞赛初中组初赛试题
2. (二叉树先序遍历)给出一棵二叉树的中序与后序排列。求出它的先序排列,其中树结点用不同的大写字母表示,例如输入BADCE,BDECA分别表示中序和后序,输出:ABCDE表示先序遍历。 var
mid, last: string;
procedure dfs(mid, last:string); var
i, len: longint; root: char; begin
if length(mid) = 0 then exit; len := length(mid); root := ① ; for i := 1 to len do
if ② then break; ③ ;
dfs(copy(mid, 1, i-1), ④ ); dfs( ⑤ ,copy(last, i, len-i)); end; begin
readln(mid); readln(last); dfs(mid, last); writeln; end.
第7页 共8页
2015年宁波市第30届中小学生计算机程序设计竞赛初中组初赛试题
2015宁波初中组(Pascal语言)参考答案与评分标准
一、单项选择题:(每题1.5分)
1. D 2. C 3. B 4. B 5. B 6. C 7. C 8. B 9. A 10. C 11. C 12. B
13. D 14. A 15. C
16. C 17. B 18. C 19. B 20. D 二、问题求解:(共2题,每空5分,共计10分) 1.17 2.214
三、阅读程序写结果(共4题,每题8分,共计32分) 1. 10 15 20 2. 31 3. 8 4. 512
四.完善程序 (前2空,每空2分,后8空,每空3分,共28分) (说明:以下各程序填空可能还有一些等价的写法) 1.
① t ④ s:=1 或者s:=2或者s:=s-4或者dec(s,4) ⑤ a[i,m]或者a[i,j+1] 2. ① last[len]或者last[length(mid)]或者last[length(last)] ② mid[i]=root或者root=mid[i]或者mid[i]=last[len] ③ write(root)或者write(last[len])或者write(last[length(last)]) ④ copy(last,1,i-1) ⑤ copy(mid,i+1,len-i) 第8页 共8页