2015年宁波市第30届中小学生计算机程序设计竞赛-初中 联系客服

发布时间 : 星期一 文章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.

① tt或者t<>n*m ② j+dy[s] ③ j>m或者m

④ 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页