一、单项选择题:(每题1.5分)
1. A 2. B 3. C 4. C 5. B
6. D 7. C 8. D 9. A 10. B
11. D 12. A 13. B 14. B 15. B
16. A 17. B 18. A 19. B 20. D
二、问题求解:(共2题,每题5分,共计10分)
1.12 4
2.7(1->2->5->6)
三、阅读程序写结果(共4题,每题8分,共计32分)
1. 23
2. 2,3,1
3. 5 4 10 1 6 22 -59 -6 -11 -6
4. DBGEFCA (求树的后序遍历)
四.完善程序 (前4空,每空2.5分,后6空,每空3分,共28分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1. ① (change >= 'A') and (change <= 'Z') (只写(change <= 'Z')也对)
② (str >= 'A') and (str <= 'Z') (只写str <= 'Z'也对)
③ str := change[ord(str) - ord('a') +1];
④ ChangeString;
2. ① a[left]
② a[j] < value (或a[j] <= value)
③ a > value (或a >= value)
④ a := value;
⑤ i,right,n
⑥ FindKth(left, i, n). 作者: 嗒嗒 时间: 2008-10-19 13:46 标题: NOIP2008普及组初赛试题
三、阅读程序写结果(共4题,每题8分,共计32分)
1.VAR i,a,b,c,d:integer;
f:array[0..3] of integer;
BEGIN
for i:=0 to 3 do
read(f);
a:=f[0]+f[1]+f[2]+f[3];
a:=a div f[0];
b:=f[0]+f[2]+f[3];
b:=b div a;
c:=(b*f[1]+a) div f[2];
d:=f[(b div c) mod 4];
if (f[(a+b+c+d) mod 4]>f[2]) then
begin
a:=a+b;
writeln(a);
end else
begin
c:=c+d;
writeln(c);
end;
END.
输入:9 19 29 39
输出:__________________________
2.procedure foo(a,b,c:integer);
begin
if a>b then foo(c,a,b)
else writeln(a,',',b,',',c);
end;
var
a,b,c:integer;
begin
read(a,b,c);
foo(a,b,c);
end.
输入:3 1 2
输出:_________________________
3.type TT=array[0..20]of integer;
prodecure func(var ary:TT;n:integer);
var i,j,x:integer;
begin
i:=0;j:=n-1;
while i<j do begin
while (i<j) and (ary>0) do inc(i);
while (i<j) and (ary[j]<0) do dec(j);
if i<j then begin x:=ary;
ary:=ary[j];
ary[j]:=x;
inc(i);
dec(j);
end;
end;
end;
var
a:TT;
i,m:integer;
begin
m:=10;
for i:=0 to m-1 do
read(a);
func(a,m);
for i:=1 to m-1 do
write(a,' ');liyilong.net
writeln;
end.
输入:5 4 -6 -11 6 -59 22 -6 1 10
输出:___________________________________________
4.procedure solve(first:string;spos_f,epos_f:integer;mid:string;spos_m,epos_m:integer);
var i,root_m:integer;
begin
if spos_f > epos_f then exit;
for i:=spos_m to epos_m do
if first[spos_f]=mid then begin
root_m:=i;
break;
end;
solve(first,spos_f+1,spos_f+(root_m-spos_m),mid,spos_m,root_m-1);
solve(first,spos_f+(root_m-spos_m)+1,epos_f,mid,root_m+1,epos_m);
write(first[spos_f]);
end;
var first,mid:string;
len:integer;
begin
readln(len);
readln(first);
readln(mid);
solve(first,1,len,mid,1,len);
writeln;
end.
Var change:string;
Str:string;
Procedure CheckChangeRule;
Var i:integer;
Begin
for i:=1 to 26 do begin
if ____①_____ then
change:=chr(ord(change)-ord('A')+ord('a'));
end;
end;
Procedure ChangeString;
Var len,i:integer;
begin
len:=length(str);
for i:=1 to len do begin
if ______②______ then
begin
str:=upcase(change[ord(str-ord('A')+1]);
end;
else
begin
_______④_______
end;
end;
end;
begin
readln(str);
readln(change);
CheckChangeRule;
_______⑤_______
writeln(str);
end.
VAR a:array[1..1000000] of integer;
n,m,ans:integer;
Procedure swap(var a,b:integer);
var t:integer;
begin
if (a<>b) then begin
t:=a; a:=b; b:=t;
end;
end;
function FindKth(left,right,n:integer):integer;
var tmp,value,i,j:integer;
begin if left=right then exit(left);
tmp:=random(right-left)+left;
swap(a[tmp],a[left]);
value:=_____①______;
i:=left; j:=right;
while i<j do begin
while (i<j) and (____②_____) do dec(j);
if i<j then begin
a:=a[j]; inc(i);
end else break;
while (i<j) and (____③_____) do inc(i);
if i<j then begin
a[j]:=a; dec(j);
end else break;
end;
______④_______
if i<n then begin inc(i); exit(FindKth(______⑤______)); end;
if i>n then begin dec(i); exit(_____⑥_____); end;
exit(i);
end;
var i:integer;
begin
randomize;
m:=1000000;
for i:=1 to m do read(a));
read(n);
ans:=FindKth(1,m,n);
writeln(a[ans]);
end.. 作者: jxy01 时间: 2008-10-19 15:08 标题: 回复 1#后生可畏 的帖子