kl800.com省心范文网

第十届全国青少年信息学奥林匹克联赛初赛试题及答案(提高组PASCAL)

第十届全国青少年信息学奥林匹克联赛初赛试题
●● ( 提高组 Pascal 语言 二小时完成 ) Pascal 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●

每题有且仅有一个正确答案. 。 一、 单项选择题 (共 10 题,每题 1.5 分,共计 15 分。每题有且仅有一个正确答案.) 1. 设全集 I = {a, b, c, d, e, f, g},集合 A = {a, b, c},B = {b, d, e},C = {e, f, g},那么集合

( A B ) ∪ (~ C ∩ B ) 为( ) 。
A. {a, b, c, d} 2. B. {a, b, d, e} C. {b, d, e} D. {b, c, d, e} E. {d, f, g}

由 3 个 a,5 个 b 和 2 个 c 构成的所有字符串中,包含子串“abc”的共有( )个。 A. 40320 B. 39600 C. 840 D. 780 E. 60 某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站 状态为空,从这一时刻开始的出入记录为: “进,出,进,进,出,进,进,进,出, 出,进,出” 。假设车辆入站的顺序为 1,2,3,……,则车辆出站的顺序为( ) 。 A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7 C. 1, 3, 5, 4, 6 D. 1, 3, 5, 6, 7 E. 1, 3, 6, 5, 7 满二叉树的叶结点个数为 N,则它的结点总数为( ) 。 N A. N B. 2 * N C. 2 * N – 1 D. 2 * N + 1 E. 2 – 1 二叉树 T,已知其前序遍历序列为 1 2 4 3 5 7 6,中序遍历序列为 4 2 1 5 7 3 6,则其后 序遍历序列为( ) 。 A. 4 2 5 7 6 3 1 B. 4 2 7 5 6 3 1 C. 4 2 7 5 3 6 1 D. 4 7 2 3 5 6 1 E. 4 5 2 6 3 7 1 十进制数 100.625 等值于二进制数( ) 。 A. 1001100.101 B. 1100100.101 C. 1100100.011 1001100.01

3.

4.

5.

6.

D. 1001100.11

E.

7.

下面哪个部件对于个人桌面电脑的正常运行不是必需的( ) 。 A. CPU B. 图形卡(显卡) C. 光驱 D. 主板 E. 内存 下列哪个网络上常用的名字缩写是错误的( ) 。 A. WWW(World Wide Web) B. URL(Uniform Resource Locator) C. HTTP(Hypertext Transfer Protocol) D. FTP(Fast Transfer Protocol) E. TCP(Transfer Control Protocol) 。

8.

9.

用静电吸附墨粉后转移到纸张上,是哪种输出设备的工作方式( ) 。 A. 针式打印机 B. 喷墨打印机 C. 激光打印机 D. 笔式绘图仪 E. 喷墨绘图仪

10. 一台计算机如果要利用电话线上网,就必须配置能够对数字信号和模拟信号进行相互 转换的设备,这种设备是( ) 。 A. 调制解调器 B. 路由器 C. 网卡 D. 网关 E. 网桥 多选或少选均不得分) 二、 不定项选择题 (共 10 题,每题 1.5 分,共计 15 分。多选或少选均不得分) 。 11. 美籍匈牙利数学家冯诺依曼对计算机科学发展所做出的贡献包括( ) 。 A. 提出理想计算机的数学模型,成为计算机科学的理论基础。 B. 提出存储程序工作原理,对现代电子计算机的发展产生深远影响。 C. 设计出第一台具有存储程序功能的计算机 EDVAC。 D. 采用集成电路作为计算机的主要功能部件。 E. 指出计算机性能将以每两年翻一番的速度向前发展。 12. 下列哪个(些)是 64 位处理器( ) 。 A. Intel Itanium B. Intel Pentium III C. AMD Athlon64 D. AMD Opteron E. IBM Power 5 。 13. (2004)10 + (32)16 的结果是( ) A. (2036)16 B. (2054)10 C. (4006)8 D. (100000000110)2 14. 下列哪个(些)不是数据库软件的名称( ) 。 A. MySQL B. SQL Server C. Oracle D. Outlook 15. 下列哪个(些)不是计算机的存储设备( ) 。 A. 文件管理器 B. 内存 C. 显卡 D. 硬盘

E. (2036)10

E. Foxpro

E. U 盘

16. 下列哪个(些)软件属于操作系统软件( ) 。 A. Microsoft Word B. Windows XP C. Foxmail Linux

D. 金山影霸

E. Red Hat

17. 下列说法中正确的有( ) 。 A. CPU 的基本功能就是执行指令。 B. CPU 的主频是指 CPU 在 1 秒内完成的指令周期数,主频越快的 CPU 速度一定越 快。 C. 内部构造不同的 CPU 运行相同的机器语言程序,一定会产生不同的结果。 D. 在一台计算机内部,一个内存地址编码对应唯一的一个内存单元。 E. 数据总线的宽度决定了一次传递数据量的大小,是影响计算机性能的因素之一。

18. 彩色显示器所显示的五彩斑斓的色彩,是由哪三色混合而成的( ) 。 A. 红 B. 白 C. 蓝 D. 绿 E. 橙 19. 下列哪个(些)程序设计语言支持面向对象程序设计方法( ) 。 A. C++ B. Object Pascal C. C D. Smalltalk E. Java 20. 某大学计算机专业的必修课及其先修课程如下表所示: 课程代号 课程名称 先修课程 C0 高等数学 C1 程序设计语言 C2 离散数学 C0, C1 C3 数据结构 C1, C2 C4 编译技术 C3 C5 操作系统 C3, C7 C6 普通物理 C0 C7 计算机原理 C6

请你判断下列课程安排方案哪个(些)是合理的( ) 。 B. C0, C1, C2, C3, C4, C6, C7, C5 A. C0, C1, C2, C3, C4, C5, C6, C7 C. C0, C1, C6, C7, C2, C3, C4, C5 D. C0, C1, C6, C7, C5, C2, C3, C4 E. C0, C1, C2, C3, C6, C7, C5, C4 三.问题求解(共 2 题,每题 5 分,共计 10 分) 问题求解( 1. 75 名儿童到游乐场去玩。他们可以骑旋转木马,坐滑行铁道,乘宇宙飞船。已知其中 20 人这三种东西都玩过,55 人至少玩过其中的两种。若每样乘坐一次的费用是 5 元, 游乐场总共收入 700,可知有 名儿童没有玩过其中任何一种。 2. 已知 a, b, c, d, e, f, g 七个人中,a 会讲英语;b 会讲英语和汉语;c 会讲英语、意大利 语和俄语;d 会讲汉语和日语;e 会讲意大利语和德语;f 会讲俄语、日语和法语;g 会讲德语和法语。能否将他们的座位安排在圆桌旁,使得每个人都能与他身边的人交 谈?如果可以,请以“a b”开头写出你的安排方案: 。

四.阅读程序(共 4 题,每题 8 分,共计 32 分) 阅读程序( 1.program progam1; var u: array [0..3] of integer; a, b, c, x, y, z: integer; begin read(u[0], u[1], u[2], u[3]); a := u[0] + u[1] + u[2] + u[3] - 5; b := u[0] * (u[1] - u[2] div u[3] + 8); c := u[0] * u[1] div u[2] * u[3]; x := (a + b + 2) * 3 - u[(c + 3) mod 4]; y := (c * 100 - 13) div a div (u[b mod 3] * 5); if((x+y) mod 2 = 0) then z := (a + b + c + x + y) div 2; z := (a + b + c – x - y) * 2;

writeln(x + y - z); end. 输入:2 5 7 4 输出:



2.program program2; var i, number, ndata, sum: integer; data: array[1..100] of integer; procedure solve(s, sign, n: integer); var i: integer; begin for i := s to ndata do begin inc(sum, sign * (number div (n * data[i]))); solve(i + 1, -sign, n * data[i]); end; end; begin read(number ,ndata); sum := 0; for i := 1 to ndata do read(data[i]); solve(1, 1, 1); writeln(sum); end. 输入:1000 3 5 13 11 输出: 3.program program3; var c: array[1..3] of string[200]; s: array[1..10] of integer; m, n, i: integer; procedure numara; var cod: boolean; i, j, nr: integer; begin for j := 1 to n do begin nr := 0; cod := true; for i := 1 to m do if c[i, j] = '1' then begin if not cod then begin cod := true; inc(s[nr]); nr := 0; end end



else begin if cod then begin nr := 1; cod := false; end else inc(nr); end; if not cod then inc(s[nr]); end; end; begin readln(m, n); for i := 1 to m do readln(c[i]); numara; for i := 1 to m do if s[i] <> 0 then write(i, ' ', s[i], ' '); end. 输入:3 10 1110000111 1100001111 1000000011 输出: 。

4.program program4; const u: array[0..2] of integer = (1, -3, 2); v: array[0..1] of integer = (-2, 3); var i, n, sum: integer; function g(n: integer): integer; var i, sum: integer; begin sum := 0; for i := 1 to n do inc(sum, u[i mod 3] * i); g := sum; end; begin sum := 0; read(n); for i := 1 to n do inc(sum, v[i mod 2] * g(i)); writeln(sum); end. 输入:103 输出: 。

五.完善程序 (前 5 空,每空 2 分,后 6 空,每空 3 分,共 28 分) 1.Joseph 题目描述:原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编 号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新 开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6, m=5的时候,出列的顺序依次是5,4,6,2,3,1。 现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到 2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。 输入:仅有的一个数字是k(0 < k <14) 。 输出: 使得最先出列的k个人都是坏人的m的最小值。 输入样例: 4 输出样例: 30 程序: program program1; var i, k, m, start: longint; find: boolean; function check(remain: integer): boolean; var result: integer; begin result:=( ① ) mod remain; if( ② )then begin start := result; check := true; end else check := false; end; begin find := false; read(k); m := k; while ( ③ ) do begin find := true; start := 0; for i := 0 to k-1 do if( not check( ④ )) then begin find := false; break; end; inc(m); end;

writeln( end.



);

2.逻辑游戏 题目描述:一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经 进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且 仅穿过一次,而且曲线的起点和终点都在这整个区域的外面。这条曲线是容许自交的。 对于图 1,我的同学告诉我画出这样的一条曲线(图 2)是不可能的,但是对于有的 图形(比如图 3) ,画出这样一条曲线是可行的。对于给定的一个图,我想知道是否可以画 出满足要求的曲线。

图1

图2

图3 图4 输入:输入的图形用一个n×n的矩阵表示的。矩阵的每一个单元里有一个0到255之间(包 括0和255)的整数。处于同一个区域的单元里的数相同,相邻区域的数不同(但是不相邻 的区域里的数可能相同) 。 输入的第一行是n(0<n<100) 。以下的n行每行包括n个整数,分别给出对应的单元里 的整数(这n个整数之间用空格分开) 。图4给出了输入样例对应的图形。 输出: 当可以画出满足题意的曲线的时候,输出“YES” ;否则,输出“NO” 。 输入样例: 3 112 122 112 输出样例: YES 程序: program program2;

const d: array[0..7] of integer = (1, 0, -1, 0, 0, 1, ① ); var orig, n, i, j, ns: integer; a: array[0..101, 0..101] of integer; bun: boolean; procedure plimba(x, y: integer); var i, x1, y1: integer; begin a[x, y] := -a[x, y]; if (abs(a[x - 1, y]) <> orig) and (( ② <> a[x - 1, y]) or (abs(a[x, y - 1]) <> orig)) then inc(ns); if (abs(a[x + 1, y]) <> orig) and ((a[x + 1, y - 1] <> a[x + 1,y]) or (abs(a[x, y - 1]) <> orig)) then inc(ns); if (abs(a[x, y - 1]) <> orig) and (( ③ <> a[x, y - 1]) or (abs(a[x - 1, y]) <> orig)) then inc(ns); if (abs(a[x, y + 1]) <> orig) and ((a[x - 1, y + 1] <> a[x,y + 1]) or (abs(a[x - 1, y]) <> orig)) then inc(ns); for i := 0 to 3 do begin x1 := x + d[2 * i];y1:=y+ ④ ; if (x1 >= 1) and (x1 <= n) and (y1 >= 1) and (y1 <= n) and ( ⑤ ) then plimba(x1, y1); end; end; begin bun := true; read(n); for i := 0 to n+1 do for j := 0 to n+1 do a[i, j] := 0; a[0, 0] := -1; a[n + 1, 0] := -1; a[0, n + 1] := -1; a[n + 1, n + 1] := -1; for i := 1 to n do for j := 1 to n do read(a[i, j]); for i := 1 to n do for j := 1 to n do if a[i, j] > -1 then begin ns := 0; ⑥ ; plimba(i, j); if ns mod 2 = 1 then bun := false; end;

if bun then writeln('YES'); if not bun then writeln('NO'); end.

第十届)提高组( 语言) NOIP2004 年(第十届)提高组(Pascal 语言)参考答案 一、单项选择题 1. A 2. D 3. E 4. C 5. B 6. B 7. C 8. D 9. C 10.A 二、 不定项选择题 11. BC 12. ACDE 13. BCD 14. D 15. AC 16. BE 17. ADE 18. ACD 19. ABDE 20. BCE 三、问题求解 1. 10 2.a b d f g e c 四、 阅读程序 1. 263 2.328 3. 1 4 2 1 3 3 4.-400 五、 完善程序 (前 5 空,每空 2 分,后 6 空,每空 3 分,共 28 分) 1.(1)start+m-1 (2)result>=k (或者 k<=result) (3)not find (或者 find=false) (4)2*k-i (5)m-1 2. (1) 0,-1 (2)a[x-1,y-1] (3)a[x-1,y-1] (4)d[2*i+1] (5)a[x1,y1]=orig (或者 orig=a[x1,y1]) (6)orig:=a[i,j]