第十四届信息学奥赛初赛试题 普及组(P)

第十四届全国青少年信息学奥林匹克联赛初赛试题

(普及组Pascal 语言二小时完成)

●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●

一、单项选择题(共20题,每题1.5分。每题有且仅有一个正确答案。)

1.微型计算机中,控制器的基本功能是()。

A.控制机器各个部件协调工作B.实现算术运算和逻辑运算

C.获取外部信息D.存放程序和数据

2.设A=True,B=False,C=True,D=False,以下逻辑运算表达式值为真的是()。

A.(A∧B)∨(C∧D∨﹁A)B.((﹁A∧B)∨C)∧﹁D

C.(B∨C∨D)∧D∧AD.A∧(D∨﹁C)∧B

3.在下列关于图灵奖的说法中,不正确的是()。

A.图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业作出重要贡献的个人

B.图灵奖有“计算机界诺贝尔奖”之称

C.迄今为止,还没有华裔计算机科学家获此殊荣

D.图灵奖的名称取自计算机科学的先驱、英国科学家阿兰•图灵

4.计算机在工作过程中,若突然停电,()中的信息不会丢失。

A.ROM和RAM B.CPUC.ROMD.RAM

5.完全二叉树共有2*N-1个结点,则它的叶节点数是()。

A.N-1B.NC.2*ND.2N-1

6.在以下各项中,()不是操作系统软件。

A.SolarisB.LinuxC.WindowsVista D.Sybase

7.设栈S 的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,f,e,c,a,则栈S 的容量至少应该是()。

A.6B.5C.4D.3

8.与十进制数28.5625相等的四进制数是()。

A.123.21B.131.22C.130.22D.130.21

9.设字符串S=”Olympic”,S的非字串的数目是()。

A.28B.29C.16D.17

10.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享。下列网站中,()是典型的Web 2.0应用。

A.SinaB.FlickerC.YahooD.Google

11.递归过程或函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。

A.队列B.多维数组C.线性表D.栈

12.(2008)10+(5B)16的结果是()。

A.(833)16B.(2089)10C.(4163)8D.([1**********]1)2

13.二叉树T,已知其先根遍历是1243576(数字为节点的编号,下同),中根遍历2415736,则该二叉树的后根遍历是()。

A.4257631B.4275631C.7425631D.4276531

14.将数组{8,23,4,16,77,-5,53,100}中的元素按从小到大的顺序排列,每次可以交换任意两个元素,最少需要交换()次。

A.4B.5C.6D.7

15.对有序数组{5,13,19,21,37,56,64,75,88,92,100}进行二分查找,成功查找元素19的查找长度(比较次数)是()。

A.1B.2C.3D.4

16.面向对象程序设计(Object-OrientedProgramming)是一种程序设计的方法论,它将对象作为程序的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。下面关于面向对象设计的说法中,不正确的是()

A.面向对象程序设计通常采用自顶向下设计方法进行设计。

B.面向对象程序设计方法具有继承性(inheritance)、封装性(encapsulation)、多态性(polymorphism)等几大特点。

C.支持面向对象特性的语言称为面向对象的编程语言,目前较为流行的有C++,JAVA,C#等。

D.面向对象的程序设计的雏形来自于Simula 语言,后来在SmallTalk 语言的完善和标准化的过程中得到更多的扩展和对以前思想的重新注解。至今,SmallTalk语言仍然被视为面向对象语言的基础

17.在32*32点阵的“字库”中,汉字“北”与“京”的字模占用字节数之和是()。

A.512B.256C.384D.128

18.设T 是一棵有n 个顶点的树,下列说法不正确的是()。

A.T有n 条边B.T是连通的C.T是无环的D.T有n-1条边

19.下列不属于NOIP 竞赛推荐使用的语言环境的是()。

A.Dev-C++B.VisualC++C.FreePascal D.Lazarus

20.在Pascal 程序中,表达式(200or 10)的值是()。

A.20B.1C.220D.202

二、问题求解(共2题,每题5分,共计10分)

1.书架上有4本不同的书A、B、C、D。其中A 和B 是红皮的,C和D 是黑皮的。把这4本书摆在书架上,满足所有黑皮的书都排在一起的摆法有_________种。满足A 必须比C 靠左,所有红皮的书要摆在一起,所有黑皮的书要摆放在一起,共有_________种摆法。

2.有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,则城市1到城市6的最短距离为__________________。

城市1城市2城市3城市4城市5城市6

城市102311215

城市22025312

城市3320365

城市4153079

城市51236702

城市615125920

三、阅读程序写结果(共4题,每题8分,共计32分)

1.VARi,a,b,c,d:integer;

f:array[0..3]of integer;

BEGIN

for i:=0to 3do

read(f[i]);

a:=f[0]+f[1]+f[2]+f[3];

a:=adiv f[0];

b:=f[0]+f[2]+f[3];

b:=bdiv a;

c:=(b*f[1]+a)div f[2];

d:=f[(bdiv 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.

输入:9192939

输出:__________________________

2.procedurefoo(a,b,c:integer);

begin

if a>bthen 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.

输入:312

输出:_________________________

3.typeTT=array[0..20]ofinteger;

prodecure func(varary:TT;n:integer);

var i,j,x:integer;

begin

i:=0;j:=n-1;

while i

while (i0)do inc(i);

while (i

if i

ary[i]:=ary[j];

ary[j]:=x;

inc(i);

dec(j);

end;

end;

end;

var

a:TT;

i,m:integer;

begin

m:=10;

for i:=0to m-1do

read(a[i]);

func(a,m);

for i:=0

write(a,'

writeln;

end.

输入:54-6-116-5922-6110

输出:___________________________________________to m-1do ');

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_fthen exit;

for i:=spos_mto epos_mdo

if first[spos_f]=mid[i]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.

输入:7

ABDCEGF

BDAGECF

输出:_________________________________

四.完善程序(前四空,每空2.5分,后6空,每空3分,共28分)

1.(字符串替换)给定一个字符串S(S仅包含大小写字母),下面的程序将S 中的每个字母用规定的字母替换,并输出S 经过替换后的结果。程序的输入是两个字符串,第一个字符串是给定的字符串S,第二个字符串S’由26个字母组成,它是a~z的任一排列,大小写不定,S’规定了每个字母对应的替换字母:S’中的第一个字母是字母A 和a 的替换字母,即S 中的A 用该字母的大写替换,S中的a 用该字母的小写替换;S’中的第二个字母是字母B 和b 的替换字母,即S 中的B 用该字母的大写替换,S中的b 用该字母的小写替换;……以此类推。

Var change:string;

Str:string;

Procedure CheckChangeRule;

Var i:integer;

Begin

for i:=1to 26do begin

if ____①_____then

change[i]:=chr(ord(change[i])-ord('A')+ord('a'));

end;

end;

Procedure ChangeString;

Var len,i:integer;

begin

len:=length(str);

for i:=1to len do begin

if ______②______then

begin

str[i]:=upcase(change[ord(str[i]-ord('A')+1]);

end;

else

begin

_______④_______

end;

end;

end;

begin

readln(str);

readln(change);

CheckChangeRule;

_______⑤_______

writeln(str);

end.

2.(找第k 大的数)给定一个长度为1,000,000的无序正整数序列,以及另一个数n(1≤n≤1000000),然后以类似快速排序的方法找到序列中第n 大的数(关于第n 大的数:例如序列{1,2,3,4,5,6}中第3大的数是4。)

VAR a:array[1..1000000]of integer;

n,m,ans:integer;

Procedure swap(vara,b:integer);

var t:integer;

begin

if (ab)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=rightthen exit(left);

tmp:=random(right-left)+left;

swap(a[tmp],a[left]);

value:=_____①______;

i:=left;j:=right;

while i

while (i

if i

a[i]:=a[j];inc(i);

end else break;

while (i

if i

a[j]:=a[i];dec(j);

end else break;

end;

______④_______

if i

if i>nthen begin dec(i);exit(_____⑥_____);end;

exit(i);

end;

var i:integer;

begin

randomize;

m:=1000000;

for i:=1to m do read(a[i]));

read(n);

ans:=FindKth(1,m,n);

writeln(a[ans]);

end.

NOIP2008年普及组(Pascal语言)参考答案与评分标准

一、单项选择题:(每题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.124

2.7(1->2->5->6)

三、阅读程序写结果(共4题,每题8分,共计32分)

1. 23

2. 2,3,1

3. 54101622-59-6-11-6

4. DBGEFCA (求树的后序遍历)

四.完善程序(前4空,每空2.5分,后6空,每空3分,共28分)

(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)

1. ①(change[i]>='A') and (change[i]='A') and (str[i]

③str[i]:=change[ord(str[i])-ord('a')+1];

④ChangeString;

2.①a[left]

②a[j]

③a[i]>value (或a[i]>=value)

④a[i]:=value;

⑤i,right,n

⑥FindKth(left,i, n)

复赛:

全国信息学奥林匹克联赛(NOIP2008)复赛

普及组

一.题目概览

中文题目名称ISBN 号码排座椅传球游戏立体图

英文题目名称isbn seat ball drawing

可执行文件名isbn seat ball drawing

输入文件名isbn.in seat.in ball.in drawing.in

输出文件名isbn.out seat.out ball.out drawing.out

每个测试点时限1秒1秒1秒1秒

测试点数目10101010

每个测试点分值10101010

比较方式全文比较全文比较全文比较全文比较

题目类型传统传统传统传统

二.提交源程序文件名

对于pascal 语言isbn.pas seat.pas ball.pas drawing.pas

对于C 语言isbn.c seat.c ball.c drawing.c

对于C++语言isbn.cpp seat.cpp ball.cpp drawing.cpp

三.编译命令(不包含任何优化开关)

对于pascal 语言fpc isbn.pas fpc seat.pas fpc ball.pas fpc drawing.pas

对于C 语言gcc –oisbn

isbn.c gcc –oseat

seat.c gcc –oball

ball.c gcc –odrawing

drawing.c

对于C++语言g++–oisbn

isbn.cpp g++–oseat

seat.cpp g++–oball

ball.cpp g++–o

drawing

drawing.cpp

四.运行内存限制

运行内存上限50M 50M 50M 50M

注意事项:

1、文件名(程序名和输入输出文件名)必须使用小写。

2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。

3、全国统一评测时采用的机器配置为:CPU1.9GHz,内存512M,上述时限以此配置为准。各省在自测时可根据具体配置调整时限。

1.ISBN 号码

(isbn.pas/c/cpp)

【问题描述】

每一本正式出版的图书都有一个ISBN 号码与之对应,ISBN 码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN 码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN 号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158mod 11的结果4作为识别码。

你的任务是编写程序判断输入的ISBN 号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN 号码。

【输入】

输入文件isbn.in 只有一行,是一个字符序列,表示一本书的ISBN 号码(保证输入符合ISBN 号码的格式要求)。

【输出】

输出文件isbn.out 共一行,假如输入的ISBN 号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN 号码(包括分隔符“-”)。

【输入输出样例1】

isbn.in isbn.out

0-670-82162-4Right

【输入输出样例2】

isbn.in isbn.out

0-670-82162-00-670-82162-4

2.排座椅

(seat.pas/c/cpp)

【问题描述】

上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D 对同学上课时会交头接耳。同学们在教室中坐成了M 行N 列,坐在第i 行第j 列

的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K 条横向的通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。

请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生对数最少。

【输入】

输入文件seat.in 的第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2

接下来D 行,每行有4个用空格隔开的整数,第i 行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。

输入数据保证最优方案的唯一性。

【输出】

输出文件seat.out 共两行。

第一行包含K 个整数,a1a2……aK,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第aK 行和第aK+1行之间要开辟通道,其中ai

第二行包含L 个整数,b1b2……bk,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第bL 列和第bL+1列之间要开辟通道,其中bi

seat.in seat.out

45123

4243

2333

25242

24

【输入输出样例解释】

**

※++

12345

上图中用符号*、※、+标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。

3.传球游戏

(ball.pas/c/cpp)

【问题描述】

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。

游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。

聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m 次以后,又回到小蛮手里。两种传球的方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。

【输入】

输入文件ball.in 共一行,有两个用空格隔开的整数n,m(3

【输出】

输出文件ball.out 共一行,有一个整数,表示符合题意的方法数。

ball.in ball.out

332

【限制】

40%的数据满足:3

100%的数据满足:3

4.立体图

(drawing.pas/c/cpp)

【问题描述】

小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。

小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的吉姆(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:

+---+

//|高

+---+|

||+

||/宽

+---+

每个顶点用1个加号’+’表示,长用3个”-“表示,宽用1个”/”表示,高用两个”|”表示。字符’+’‘-‘’/’‘|’的ASCII 码分别为43,45,47,124。字符’.’(ASCII码46)需要作为背景输出,即立体图里的空白部分需要用’.’代替。立体图的画法如下面的规则:若两块积木左右相邻,图示为:

..+---+---+

.///|

+---+---+|

|||+

|||/.

+---+---+..

若两块积木上下相邻,图示为:

..+---+

.//|

+---+|

||+

||/|

+---+|

||+

||/.

+---+..

若两块积木前后相邻,图示为:

….+---+

…//|

..+---+|

.//|+

+---+|/.

||+..

||/…

+---+….

立体图中,定义位于第(m,1)的格子(即第m 行第1列的格子)上面自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。

【输入】

输入文件drawing.in 第一行有用空格隔开的两个整数m 和n,表示有m*n个格子(1

【输出】

输出文件drawing.out 中包含题目要求的立体图,是一个K 行L 列的字符矩阵,其中K 和L 表示最少需要K 行L 列才能按规定输出立体图。

【输入输出样例】

drawing.in drawing.out 34

2212

2211

3212

......+---+---+...+---+..+---+//|..//|.//|-+---+|.+---+|+---+|//|+-||+||+---+|/+---+|/|||//|+//|-+|

+---+---+|/+---+|/|+|||+-||+|/.|||/||/|+..

+---+---+---+---+|/...|||||+....|||||/.....

+---+---+---+---+......

第十四届全国青少年信息学奥林匹克联赛初赛试题

(普及组Pascal 语言二小时完成)

●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●

一、单项选择题(共20题,每题1.5分。每题有且仅有一个正确答案。)

1.微型计算机中,控制器的基本功能是()。

A.控制机器各个部件协调工作B.实现算术运算和逻辑运算

C.获取外部信息D.存放程序和数据

2.设A=True,B=False,C=True,D=False,以下逻辑运算表达式值为真的是()。

A.(A∧B)∨(C∧D∨﹁A)B.((﹁A∧B)∨C)∧﹁D

C.(B∨C∨D)∧D∧AD.A∧(D∨﹁C)∧B

3.在下列关于图灵奖的说法中,不正确的是()。

A.图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业作出重要贡献的个人

B.图灵奖有“计算机界诺贝尔奖”之称

C.迄今为止,还没有华裔计算机科学家获此殊荣

D.图灵奖的名称取自计算机科学的先驱、英国科学家阿兰•图灵

4.计算机在工作过程中,若突然停电,()中的信息不会丢失。

A.ROM和RAM B.CPUC.ROMD.RAM

5.完全二叉树共有2*N-1个结点,则它的叶节点数是()。

A.N-1B.NC.2*ND.2N-1

6.在以下各项中,()不是操作系统软件。

A.SolarisB.LinuxC.WindowsVista D.Sybase

7.设栈S 的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,f,e,c,a,则栈S 的容量至少应该是()。

A.6B.5C.4D.3

8.与十进制数28.5625相等的四进制数是()。

A.123.21B.131.22C.130.22D.130.21

9.设字符串S=”Olympic”,S的非字串的数目是()。

A.28B.29C.16D.17

10.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享。下列网站中,()是典型的Web 2.0应用。

A.SinaB.FlickerC.YahooD.Google

11.递归过程或函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。

A.队列B.多维数组C.线性表D.栈

12.(2008)10+(5B)16的结果是()。

A.(833)16B.(2089)10C.(4163)8D.([1**********]1)2

13.二叉树T,已知其先根遍历是1243576(数字为节点的编号,下同),中根遍历2415736,则该二叉树的后根遍历是()。

A.4257631B.4275631C.7425631D.4276531

14.将数组{8,23,4,16,77,-5,53,100}中的元素按从小到大的顺序排列,每次可以交换任意两个元素,最少需要交换()次。

A.4B.5C.6D.7

15.对有序数组{5,13,19,21,37,56,64,75,88,92,100}进行二分查找,成功查找元素19的查找长度(比较次数)是()。

A.1B.2C.3D.4

16.面向对象程序设计(Object-OrientedProgramming)是一种程序设计的方法论,它将对象作为程序的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。下面关于面向对象设计的说法中,不正确的是()

A.面向对象程序设计通常采用自顶向下设计方法进行设计。

B.面向对象程序设计方法具有继承性(inheritance)、封装性(encapsulation)、多态性(polymorphism)等几大特点。

C.支持面向对象特性的语言称为面向对象的编程语言,目前较为流行的有C++,JAVA,C#等。

D.面向对象的程序设计的雏形来自于Simula 语言,后来在SmallTalk 语言的完善和标准化的过程中得到更多的扩展和对以前思想的重新注解。至今,SmallTalk语言仍然被视为面向对象语言的基础

17.在32*32点阵的“字库”中,汉字“北”与“京”的字模占用字节数之和是()。

A.512B.256C.384D.128

18.设T 是一棵有n 个顶点的树,下列说法不正确的是()。

A.T有n 条边B.T是连通的C.T是无环的D.T有n-1条边

19.下列不属于NOIP 竞赛推荐使用的语言环境的是()。

A.Dev-C++B.VisualC++C.FreePascal D.Lazarus

20.在Pascal 程序中,表达式(200or 10)的值是()。

A.20B.1C.220D.202

二、问题求解(共2题,每题5分,共计10分)

1.书架上有4本不同的书A、B、C、D。其中A 和B 是红皮的,C和D 是黑皮的。把这4本书摆在书架上,满足所有黑皮的书都排在一起的摆法有_________种。满足A 必须比C 靠左,所有红皮的书要摆在一起,所有黑皮的书要摆放在一起,共有_________种摆法。

2.有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,则城市1到城市6的最短距离为__________________。

城市1城市2城市3城市4城市5城市6

城市102311215

城市22025312

城市3320365

城市4153079

城市51236702

城市615125920

三、阅读程序写结果(共4题,每题8分,共计32分)

1.VARi,a,b,c,d:integer;

f:array[0..3]of integer;

BEGIN

for i:=0to 3do

read(f[i]);

a:=f[0]+f[1]+f[2]+f[3];

a:=adiv f[0];

b:=f[0]+f[2]+f[3];

b:=bdiv a;

c:=(b*f[1]+a)div f[2];

d:=f[(bdiv 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.

输入:9192939

输出:__________________________

2.procedurefoo(a,b,c:integer);

begin

if a>bthen 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.

输入:312

输出:_________________________

3.typeTT=array[0..20]ofinteger;

prodecure func(varary:TT;n:integer);

var i,j,x:integer;

begin

i:=0;j:=n-1;

while i

while (i0)do inc(i);

while (i

if i

ary[i]:=ary[j];

ary[j]:=x;

inc(i);

dec(j);

end;

end;

end;

var

a:TT;

i,m:integer;

begin

m:=10;

for i:=0to m-1do

read(a[i]);

func(a,m);

for i:=0

write(a,'

writeln;

end.

输入:54-6-116-5922-6110

输出:___________________________________________to m-1do ');

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_fthen exit;

for i:=spos_mto epos_mdo

if first[spos_f]=mid[i]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.

输入:7

ABDCEGF

BDAGECF

输出:_________________________________

四.完善程序(前四空,每空2.5分,后6空,每空3分,共28分)

1.(字符串替换)给定一个字符串S(S仅包含大小写字母),下面的程序将S 中的每个字母用规定的字母替换,并输出S 经过替换后的结果。程序的输入是两个字符串,第一个字符串是给定的字符串S,第二个字符串S’由26个字母组成,它是a~z的任一排列,大小写不定,S’规定了每个字母对应的替换字母:S’中的第一个字母是字母A 和a 的替换字母,即S 中的A 用该字母的大写替换,S中的a 用该字母的小写替换;S’中的第二个字母是字母B 和b 的替换字母,即S 中的B 用该字母的大写替换,S中的b 用该字母的小写替换;……以此类推。

Var change:string;

Str:string;

Procedure CheckChangeRule;

Var i:integer;

Begin

for i:=1to 26do begin

if ____①_____then

change[i]:=chr(ord(change[i])-ord('A')+ord('a'));

end;

end;

Procedure ChangeString;

Var len,i:integer;

begin

len:=length(str);

for i:=1to len do begin

if ______②______then

begin

str[i]:=upcase(change[ord(str[i]-ord('A')+1]);

end;

else

begin

_______④_______

end;

end;

end;

begin

readln(str);

readln(change);

CheckChangeRule;

_______⑤_______

writeln(str);

end.

2.(找第k 大的数)给定一个长度为1,000,000的无序正整数序列,以及另一个数n(1≤n≤1000000),然后以类似快速排序的方法找到序列中第n 大的数(关于第n 大的数:例如序列{1,2,3,4,5,6}中第3大的数是4。)

VAR a:array[1..1000000]of integer;

n,m,ans:integer;

Procedure swap(vara,b:integer);

var t:integer;

begin

if (ab)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=rightthen exit(left);

tmp:=random(right-left)+left;

swap(a[tmp],a[left]);

value:=_____①______;

i:=left;j:=right;

while i

while (i

if i

a[i]:=a[j];inc(i);

end else break;

while (i

if i

a[j]:=a[i];dec(j);

end else break;

end;

______④_______

if i

if i>nthen begin dec(i);exit(_____⑥_____);end;

exit(i);

end;

var i:integer;

begin

randomize;

m:=1000000;

for i:=1to m do read(a[i]));

read(n);

ans:=FindKth(1,m,n);

writeln(a[ans]);

end.

NOIP2008年普及组(Pascal语言)参考答案与评分标准

一、单项选择题:(每题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.124

2.7(1->2->5->6)

三、阅读程序写结果(共4题,每题8分,共计32分)

1. 23

2. 2,3,1

3. 54101622-59-6-11-6

4. DBGEFCA (求树的后序遍历)

四.完善程序(前4空,每空2.5分,后6空,每空3分,共28分)

(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)

1. ①(change[i]>='A') and (change[i]='A') and (str[i]

③str[i]:=change[ord(str[i])-ord('a')+1];

④ChangeString;

2.①a[left]

②a[j]

③a[i]>value (或a[i]>=value)

④a[i]:=value;

⑤i,right,n

⑥FindKth(left,i, n)

复赛:

全国信息学奥林匹克联赛(NOIP2008)复赛

普及组

一.题目概览

中文题目名称ISBN 号码排座椅传球游戏立体图

英文题目名称isbn seat ball drawing

可执行文件名isbn seat ball drawing

输入文件名isbn.in seat.in ball.in drawing.in

输出文件名isbn.out seat.out ball.out drawing.out

每个测试点时限1秒1秒1秒1秒

测试点数目10101010

每个测试点分值10101010

比较方式全文比较全文比较全文比较全文比较

题目类型传统传统传统传统

二.提交源程序文件名

对于pascal 语言isbn.pas seat.pas ball.pas drawing.pas

对于C 语言isbn.c seat.c ball.c drawing.c

对于C++语言isbn.cpp seat.cpp ball.cpp drawing.cpp

三.编译命令(不包含任何优化开关)

对于pascal 语言fpc isbn.pas fpc seat.pas fpc ball.pas fpc drawing.pas

对于C 语言gcc –oisbn

isbn.c gcc –oseat

seat.c gcc –oball

ball.c gcc –odrawing

drawing.c

对于C++语言g++–oisbn

isbn.cpp g++–oseat

seat.cpp g++–oball

ball.cpp g++–o

drawing

drawing.cpp

四.运行内存限制

运行内存上限50M 50M 50M 50M

注意事项:

1、文件名(程序名和输入输出文件名)必须使用小写。

2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。

3、全国统一评测时采用的机器配置为:CPU1.9GHz,内存512M,上述时限以此配置为准。各省在自测时可根据具体配置调整时限。

1.ISBN 号码

(isbn.pas/c/cpp)

【问题描述】

每一本正式出版的图书都有一个ISBN 号码与之对应,ISBN 码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN 码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN 号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158mod 11的结果4作为识别码。

你的任务是编写程序判断输入的ISBN 号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN 号码。

【输入】

输入文件isbn.in 只有一行,是一个字符序列,表示一本书的ISBN 号码(保证输入符合ISBN 号码的格式要求)。

【输出】

输出文件isbn.out 共一行,假如输入的ISBN 号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN 号码(包括分隔符“-”)。

【输入输出样例1】

isbn.in isbn.out

0-670-82162-4Right

【输入输出样例2】

isbn.in isbn.out

0-670-82162-00-670-82162-4

2.排座椅

(seat.pas/c/cpp)

【问题描述】

上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D 对同学上课时会交头接耳。同学们在教室中坐成了M 行N 列,坐在第i 行第j 列

的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K 条横向的通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。

请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生对数最少。

【输入】

输入文件seat.in 的第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2

接下来D 行,每行有4个用空格隔开的整数,第i 行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。

输入数据保证最优方案的唯一性。

【输出】

输出文件seat.out 共两行。

第一行包含K 个整数,a1a2……aK,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第aK 行和第aK+1行之间要开辟通道,其中ai

第二行包含L 个整数,b1b2……bk,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第bL 列和第bL+1列之间要开辟通道,其中bi

seat.in seat.out

45123

4243

2333

25242

24

【输入输出样例解释】

**

※++

12345

上图中用符号*、※、+标出了3对会交头接耳的学生的位置,图中3条粗线的位置表示通道,图示的通道划分方案是唯一的最佳方案。

3.传球游戏

(ball.pas/c/cpp)

【问题描述】

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。

游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。

聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m 次以后,又回到小蛮手里。两种传球的方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有3个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。

【输入】

输入文件ball.in 共一行,有两个用空格隔开的整数n,m(3

【输出】

输出文件ball.out 共一行,有一个整数,表示符合题意的方法数。

ball.in ball.out

332

【限制】

40%的数据满足:3

100%的数据满足:3

4.立体图

(drawing.pas/c/cpp)

【问题描述】

小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。

小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每个格子上堆了一些同样大小的吉姆(积木的长宽高都是1),小渊想请你打印出这些格子的立体图。我们定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放:

+---+

//|高

+---+|

||+

||/宽

+---+

每个顶点用1个加号’+’表示,长用3个”-“表示,宽用1个”/”表示,高用两个”|”表示。字符’+’‘-‘’/’‘|’的ASCII 码分别为43,45,47,124。字符’.’(ASCII码46)需要作为背景输出,即立体图里的空白部分需要用’.’代替。立体图的画法如下面的规则:若两块积木左右相邻,图示为:

..+---+---+

.///|

+---+---+|

|||+

|||/.

+---+---+..

若两块积木上下相邻,图示为:

..+---+

.//|

+---+|

||+

||/|

+---+|

||+

||/.

+---+..

若两块积木前后相邻,图示为:

….+---+

…//|

..+---+|

.//|+

+---+|/.

||+..

||/…

+---+….

立体图中,定义位于第(m,1)的格子(即第m 行第1列的格子)上面自底向上的第一块积木(即最下面的一块积木)的左下角顶点为整张图最左下角的点。

【输入】

输入文件drawing.in 第一行有用空格隔开的两个整数m 和n,表示有m*n个格子(1

【输出】

输出文件drawing.out 中包含题目要求的立体图,是一个K 行L 列的字符矩阵,其中K 和L 表示最少需要K 行L 列才能按规定输出立体图。

【输入输出样例】

drawing.in drawing.out 34

2212

2211

3212

......+---+---+...+---+..+---+//|..//|.//|-+---+|.+---+|+---+|//|+-||+||+---+|/+---+|/|||//|+//|-+|

+---+---+|/+---+|/|+|||+-||+|/.|||/||/|+..

+---+---+---+---+|/...|||||+....|||||/.....

+---+---+---+---+......


相关文章

  • 信息学奥赛普及组初赛模拟试题
  • 信息学奥赛普及组初赛模拟试题(一) 发布:郭琪 时间:2011/7/6 13:56:18 来源:宁夏教研网 点击: 0 77 讨论: 试题由四部分组成:1.选择题 2.问题求解题 3.程序阅读理解题 4.程序完善题 一.选择题:共20题,每 ...查看


  • 高中数理化竞赛参考书推荐
  • 高中化学竞赛参考书特别推荐 常规/高考类: <高中化学重难点手册>(华中师范大学出版社,王后雄老师主编):历年高考试题汇编(任何一种,最好有详细解析的): <高中化学读本>(很老的化学教材): <高中化学研究性 ...查看


  • 浅谈对高中生物奥赛的认识
  • 浅谈对高中生物奥赛的认识 1.基本情况全国生物竞赛组织工作是在教育部和中国科协的领导下,由全国生物竞赛委员会具体承办.现任全国中学生物竞赛委员会主任是北京师范大学生命科学学院教授刘恩山,竞赛活动依据2001年12月颁布的联赛.竞赛章程进行, ...查看


  • 信息学奥赛简介
  • 信息学奥赛简介 一.关于青少年信息学奥林匹克竞赛 青少年信息学(计算机)奥林匹克竞赛(早期称为青少年计算机程序设计竞赛)是旨在广大青少年中普及计算机教育,推广计算机应用的一项学科性竞赛活动.全国从1984年开始举办全国性竞赛.而自从1989 ...查看


  • 高中化学化学竞赛试题及解题方法研究
  • 化学奥赛试题解法探析 竞赛辅导训练是否有效,关键在于训练思维能力,培养思维方法.纵观近年来全国初赛及决赛试题,就解决问题的思维途径来看,可有以下几种. 一.类比联想 类比联想是解答化学奥赛试题的基本方法.它是抓住题目所给信息,展开联想,根据 ...查看


  • 高一信息学奥赛班组队选拔试题[修改]
  • 高一信息学奥赛班组队选拔试题 班级: 姓名: 初中是否参加过信息奥赛初赛[是/否]: .. 初中是否参加过信息奥赛复赛[是/否]: .. 一.选择题(每题1分,共20分) 1. 微型计算机的问世是由于( ) 的出现. a. 中小规模集成电路 ...查看


  • 全国青少年信息学奥林匹克竞赛
  • 编辑 锁定 为了向那些在中学阶段学习的青少年普及计算机科学知识,为了给学校的信息技术教育课程提供动力和新的思路,为了给那些有才华的学生提供相互交流和学习的机会.也为通过竞赛和相关的活动培养和选拔优秀计算机人才,教育部和中国科协委托中国计算机 ...查看


  • 全方位解析 | 兰生复旦最新公布68项信息公开目录
  • 昨日,兰生复旦中学在其官网公布了信息公开目录.其中包含了重大改革与决策.教学管理.招生工作等多达68项三级指标. 小帮将学校规章.党建工作等相对官方.同时对家长需求度不高的信息筛选后,整理总结出了一些和我们择校相关的内容全方位解析.以兰生复 ...查看


  • 物理奥赛培训
  • 全国中学生超常教育研究协作组第12届年会--论文 物理奥赛培训的实践与思考 黄爱国 (华南师范大学附属中学 510630) 摘要:本文从发扬团结协作的团队精神.形成理论和实验培训的教材体系.提高学生竞赛实验能力.培养自学能力和创新能力.提高 ...查看


热门内容