96
全国分区联赛
高中组(初赛)
第二届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题
(高中组)
Pascal语言
竞赛用时:2小时
●●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效
●●
一、基础知识部分
(44分)
1.
已知A盘上的目录和文件组织如下:
TP
D11
F1.TXT
TB
F2.TXT
DOS
D31
F3.DOC
F4.DOC
其中TP、TB、DOS、D11、D31都是子目录名。
设当前命令提示符为
A:\TB>
,请写出完成如下操作的DOS命令:
①在DOS运行中,没有执行过PATH命令,现要用DOS子目录中FORMAT命令,对插入在B驱动器(5.25英寸高密)中的360KB软盘进行格式化工作,请写出相应的操作命令。
②
交换F2.TXT与F3.DOC两个文件的内容,要求使用的命令不得超过三条;
2.请用等号或不等号联接表示下列不同进位制数值的大小。
例如:
(3)10
<
(4)4
=
(100)2
<
(A)16
其中圆括号外右下角的下标,表示圆括号内数的进位制。
(98.375)10
(142.3)8
(58.5)16
(1011000.0101)2
3.阅读程序,写出程序段运行后数组元素
a1
,
a2
,
…,
a11
中的值。
a[1]:=1;
a[2]:=1;
k:=1;
repeat
a[k+2]:=1;
for
i:=k+1
downto
2
do
a[i]:=a[i]+a[i-1];
k:=k+1;
until
k>=10;
4.
已知:
ack(m,n)
函数的计算公式如下:
n+1
m=0
ack
(m
,
n)
=
ack
(m-1
,
1)
n=0
ack
(m-1
,
ack
(
m
,
n-1)
)
m≠0
且
n≠0
请计算:
ack
(
1
,
3
)、ack
(
2
,
4
)、ack
(
3
,
3
)、ack
(
3
,
4
)
的值
5.
有N×N个数据组成如下方阵:
并已知:AIJ
=
AJI
现将A11,A12,…,A1N,A22,A23,…,A2N,A33,A34,…,A3N,…,ANN
存储在一维数组A[1],A[2],…,A[
N
(N+1)
/
2
]中。
试问:任给I
,
J
怎样求出K来,使得A[
K]的值正好是AIJ,请写出由I
,
J计算K的表达式。
6.
已知:
A1
,
A2
,
…
,
A81
共有81个数,其中只有一个数比其他数大,要用最少的比较运算次数,把这个值大的数找出来(假设两个数比较一次能决定出大于、小于或等于这三种情况)请将以下算法补充完整。
第一步:
s1=A1
+
A2
+
…
+
A27
s2=A28
+
A29
+
…
+
A54
第一次比较
(
s1
,
s2
):
s1
>
s2
取K
=
0
s1
<
s2
取K
=
27
s1
=
s2
取K
=
54
第二步:
s1=AK+1
+
AK+2
+
…
+
AK+9
s2=AK+10
+
AK+11
+
…
+
AK+18
第二次比较
(
s1
,
s2
):
s1
>
s2
取K
=
①
s1
<
s2
取K
=
②
s1
=
s2
取K
=
③
第三步:
s1=AK+1
+
AK+2
+
AK+3
s2=AK+4
+
AK+5
+
AK+6
第三次比较
(
s1
,
s2
):
s1
>
s2
取K
=
④
s1
<
s2
取K
=
⑤
s1
=
s2
取K
=
⑥
第四步:
s1=AK+1
s2=AK+2
第四次比较
(
s1
,
s2
):
s1
>
s2
⑦
为最大数
s1
<
s2
⑧
为最大数
s1
=
s2
⑨
为最大数
7.
下面是一个利用完全二叉树特性,用顺序表来存储的一棵二叉树,结点数据为字符型(结点层次号从小到大,同一层从左到右顺序存储,#表示空结点,@表示存储数据结束)。现要求画出对应该存储结构的二叉树示意图。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
A
B
C
#
#
D
E
#
#
#
#
#
G
F
@
二、根据题目要求,补充完善以下程序:
1.[
[题
目]:
积木游戏:设有n个小木块排成一排,如下图:
□
□
□
……
……
□
游戏开始时,每个小木块向下的一面涂有红、黄、蓝三种颜色之中的一种(约定:
0表示红色,1表示黄色,2表示蓝色)。要求通过翻看与交换方式对小木块重新排列(翻看的规则为每个小木块只能看一次),最终成为下面的形状:
□
□
□
……
□
□
□
□
……
□
□
□
□
……
□
红
蓝
黄
即相同颜色的木块排列在一起,设计一个翻看与交换的方案,使得用最少的交换次数实现上面的要求。
[算法描述]:翻看小木块时,可以从两端进行。例如,设中间状态如下:
□
□
□……
□
□
□……
□
□
□……
□
□
□……
□
红
未翻过
蓝
黄
此时,可以从两个方向看,即从a或b处开始:
1.若看a则有三种可能性:
为红色,则不用交换
为蓝色,交换一次,即a与b交换
为黄色,交换两次,即c与b交换一次,然后a与c再交换一次
此时,平均交换次数为1
2.若看b也有三种可能性:
为蓝色,则不用交换
为红色,交换一次,即b与a交换
为黄色,交换一次,即b与c交换
此时,平均交换次数为2/3
由此可见,从b处翻看直到游戏结束,次数最少符合题目要求。
[程
序]:
program
exp1
(input
,
output);
const
n
=
20;
var
i
,
tem
,
r
,
b
,
y
:
integer;
a
:
array
[
1
.
.
n
]
of
0
.
.
2;
begin
for
i
:=
1
to
n
do
read
(a[
i
]);
r
:=
1;
①
;
y
:=
n;
while
②
do
if
③
then
begin
tem
:=
a[
r
];
a[
r
]:=
a[
b
];
a[
b
]
:=
tem;
r
:=
r
+
1
end
else
if
④
then
begin
tem
:=
a[
b
];
a[
b
]
:=
a[
y
];
a[
y
]:=
tem;
⑤
;
⑥
;
end
else
b
:=
b
-
1;
for
i
:=
1
to
n
do
write
(
a[
i
]
:
3
)
end.
2.[题
目]:
四色问题。设有下列形状的图形:有8个区域,其编号为1,2,…,n。
(n
=
8)
图形中各区域的相邻关系用上边的邻接矩阵表示:1——相邻,0——不相邻。
[程序要求]:将上面图形的每一个部分涂上红(1),黄(2),蓝(3),绿(4)四种颜色之一,要求相邻的部分不同色。
[算法描述]:用数组
r
:
array
[
1
..
n
,
1
..
n
]
of
0
..
1
;
表示邻接矩阵
s
:
array
[
1
..
n
]
of
integer
;
表示涂的元素。
采用回溯的方法,首先给第一个图形涂上红色(1),然后在下面的图形中依次涂上其它颜色,当有矛盾时回溯解决。
[程
序]:
const
n
=
8;
var
i
,
j
,
k
:
integer;
r
:
array
[
1
..
n
,
1
..
n
]
of
0
..
1;
s
:
array
[
1
..
n
]
of
integer;
begin
for
i
:=
1
to
n
do
begin
for
j:=1
to
n
do
read
(
r
[
i
,
j
]);
readln;
end;
①
;
i
:=
2;
j
:=
1;
while
i
<
=
n
do
begin
while
(
j
<
=4
)
and
(i
<
=
n)
do
begin
k
:=
1;
while
②
do
k
:=
k
+
1;
if
k
<
i
then
③
else
begin
④
;
i
:=
i
+
1;
j
:=
1;
end;
end;
if
j
>
4
then
begin
i
:=
i
-
1;
⑤
end;
end;
for
i
:=
1
to
n
do
writeln
(
i
,
‘→’
,
s[
i
])
end.
3.[问
题]:
多项式加法运算:一个仅含有x的多项式可以用下列的方式表示:
(系数,指数),
(系数,指数),……,(0,0)
。其中
(0
,
0)
作为结束标志。
例如:
P
(
x
)
=
4x6–
3x3
+
2x2–1
可表示为:(4
,
6),(-3
,
3),(2
,
2),(-1
,
0),(0
,
0)
Q
(
x
)
=
x4–x
+1
可表示为:(1
,
4),(-1
,
1),(1
,
0),(0
,
0)
当用上面的方式给出2个多项式之后,程序对这两个多项式进行加法运算,结果也用上面的方式给出。
例如:上面的
P(
x
)
和
Q
(
x
)
相加的结果为:
4x6
+
x4–
3x3
+
2x2–x
表示结果为:
(4
,
6),(1
,
4),(-3
,
3),(2
,
2),(-1
,
1),(0
,
0)
[算法描述]:多项式可用数组
p
:
array
[
1
..
n
,
1
..
2
]
of
integer
表示。
分别以p1表示p,p2表示q,p3表示结果。处理的过程为将p赋值到p3,然后逐项检查q,当发现有相同的方次时,进行系数相加;当发现没有相同方次时,插入到p3中去。
[程
序]:
var
x
,
y
,
i
,
i1
,
j
,
j1
,
j2
:
integer;
p1
,
p2
,
p3
:
array
[
1
..
20
,
1
..
2
]
of
integer;
begin
j1:=
0;
write
(
‘
Input
P
(x)
=’);
read
(
x
,
y
);
while
(x
<>0)
or
(y<>0)
do
begin
j1:=
j1+1;
p1
[
j1,
1
]:=
x;
p1
[
j1,
2
]:=
y;
read
(
x
,
y
)
;
end;
j1:=
j1+1;
p1[
j1
,
1
]:=
0;
p1[
j1
,
2
]
:=
0;
write
(‘
Input
Q
(
x
)
=
’
);
read
(x
,
y);
j2
:=
0;
while
(x
<>0)
or
(y<>0)
do
begin
j2
:=
j2+1;
p2[
j2
,
1
]
:=x;
p2[
j2
,
2
]:=
y;
read
(x
,
y);
end;
j2
:=
j2+1;
p2[
j2
,
1
]
:=
0;
p2[
j2
,
2
]:=
0;
for
i
:=
1
to
j1
do
begin
p3[
i
,
1
]
:=
p1[
i
,
1
];
p3[
i
,
2
]
:=
p1[
i
,
2
]
end;
i
:=
1;
while
①
do
begin
if
②
then
begin
for
j
:=
j1
downto
1
do
begin
p3
[
j+1
,
1
]
:=
p3
[
j
,
1
];
p3
[
j+1
,
2
]
:=
p3
[
j
,
2
]
end
p3
[
i
,
1]:=
p2[
i
,
1];
p3[
i
,
2
]:=
p2[
i
,
2
];
j1:=
j1+1
end
else
begin
i1:=1;
while
p2[
i
,
2
]
<
p3[
i1
,
2
]
do
③
;
if
p2[
i
,
2
]
=
p3[
i1
,
2
]
then
p3[
i1
,
2
]
:=
④
else
begin
for
j
:=
j1
downto
i1
do
begin
p3[
j+1
,
1
]:=
p3[
j
,
1
];
p3[
j+1
,
2
]:=
p3[
j
,
2
]
end;
p3[
i1
,
1
]:=
p[
i
,
1
];
p3[
i1
,
2
]:=
p3[
i
,
2
];
⑤
;
end;
end;
{if}
i
:=
i
+
1;
end;
{while}
for
j
:=
1
to
j1-2
do
write
(
‘
(
’
,
p3[
j
,
1
]
,
‘
,
’
,
p3[
j
,
2
]
,
‘
)
,’
);
writeln
(
‘
(
’
,
p3[
j+1
,
1
],
‘
,
’
,
p3[
j+1
,
2
],
‘
)’
);
end.
R
O
O
T
A11
A12
A13
……
A1N
A21
A22
A23
……
A2N
A31
A32
A33
……
A3N
……
……
AN1
AN2
AN3
……
ANN
a
b
c
8
7
6
5
2
3
4
1
1
2
3
4
5
6
7
8
1
0
1
0
0
0
0
1
1
2
1
0
1
0
0
1
1
0
3
0
1
0
1
0
1
0
0
4
0
0
1
0
1
1
0
0
5
0
0
0
1
0
1
0
0
6
0
1
1
1
1
0
1
0
7
1
1
0
0
0
1
0
1
8
1
0
0
0
0
0
1
0
2-2第二届全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛(高中组)答案
一、基础知识部分
(共39分)
(1)
①
A:\TB>
CD..
{
2
%
}
A:\
CD
DOS
A:\DOS
>
FORMAT
B:/s/4
(/s是将磁盘格式成系统盘,/4表示进行低密度格式化)
②
A:\TB>
COPY
A:\TP\D11\F2.TXT
A:\DOS\D31\HH.DOC
{3
%
}
A:\TB>
COPY
A:\D0S\D31\F3.DOC
A:\TP\D11\F2.TXT
A:\TB>
REN
A:\DOS\D31\HH.DOC
F3.DOC
(2)
(98.375)10
=
(142.3)8
>
(58.5)16
>
(1011000.0101)2
{3
%
}
(3)
{6
%
}
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
1
9
36
84
126
126
84
36
9
1
1
(4)
ack
(
1
,
3
)
=5
ack
(
2
,
4
)
=11
{4
%
}
ack
(
3
,
3
)
=61
ack
(
3
,
4
)
=125
(5)
K
=
I
(I-1)/2+J
{5
%
}
(6)
①
K
②
K+9
③
K+18
④
K
⑤
K+3
⑥
K+6
⑦
AK+1
⑧
AK+2
⑨
AK+3
{9
%
}
(7)二叉树示意图:
{7%
}
二、根据题目要求,补充完善以下伪代码程序
(
共61分)
(1)
{
3+4+3+3+4+4
=21%
}
①
b:=n
②
b>=r
③
a[b]=0
④
a[b]=1
⑤
b:=b-1
⑥
y:=y-1
(2)
{
4+4+4+4+4
=20%
}
①
s[1]:=1
②
(k
r[i,k]<>j)
或
(
kj)or(
r[i,k]<>1))
③
j:=j+1;
④
s[i]:=j
⑤
j:=s[i]+1
(3){
4+4+4+4+4
=20%
}
①
p2[i,1]<>0
②
p2[i,2]>p3[1,2]
③
i1:=i1+1
④
p3[i1,1]+p2[i,1]
⑤
j1:=j1+1
E
D
G
F
C
A
B
―
2
―第十五届全国青少年信息学奥林匹克联赛初赛试题
(
提高组
Pascal语言
二小时完成
)
●
●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效
●●
一.
单项选择题
(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案。)
1、关于图灵机下面的说法哪个是正确的:
A)
图灵机是世界上最早的电子计算机。
B)
由于大量使用磁带操作,图灵机运行速度很慢。
C)
图灵机只是一个理论上的计算模型。
D)
图灵机是英国人图灵发明的,在二战中为破译德军的密码发挥了重要作用。
2、关于BIOS下面的说法哪个是正确的:
A)
BIOS是计算机基本输入输出系统软件的简称。
B)
BIOS里包含了键盘、鼠标、声卡、图形界面显器等常用输入输出设备的驱动程序。
C)
BIOS一般由操作系统厂商来开发完成。
D)
BIOS能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。
3、已知大写字母A的ASCII编码为65(十进制),则大写字母J的
十六进制
ASCII编码为:
A)
48
B)
49
C)
50
D)
以上都不是
4、在字长为16位的系统环境下,一个16位带符号整数的二进制补码为1111111111101101。其对应的十进制整数应该是:
A)
19
B)
-19
C)
18
D)
-18
5、一个包含n个分支结点(非叶结点)的非空满k叉树,k>=1,它的叶结点数目为:
A)
nk
+
1
B)
nk-1
C)
(k+1)n-1
D.
(k-1)n+1
6.
表达式a
(b+c)-d的后缀表达式是:
A)
abcd
+-
B)
abc+
d-
C)
abc
+d-
D)
-+
abcd
7、最优前缀编码,也称Huffman编码。这种编码组合的特点是对于较频繁使用的元素给与较短的唯一编码,以提高通讯的效率。下面编码组合哪一组不是合法的前缀编码。
A)(00,01,10,11)
B)(0,1,00,11)
C)(0,10,110,111)
D)(1,01,000,001)
8、快速排序平均情况和最坏情况下的算法时间复杂度分别为:
A)
平均情况
O(nlog2n),最坏情况O(n2)
B)
平均情况
O(n),
最坏情况O(n2)
C)
平均情况
O(n),
最坏情况O(nlog2n)
D)
平均情况
O(log2n),
最坏情况O(n2)
9、左图给出了一个加权无向图,从顶点V0开始用prim算法求最小生成树。则依次加入最小生成树的顶点集合的顶点序列为:A)
V0,
V1,
V2,
V3,
V5,
V4
B)
V0,
V1,
V5,
V4,
V3,
V3
C)
V1,
V2,
V3,
V0,
V5,
V4
D)
V1,
V2,
V3,
V0,
V4,
V5
10、全国信息学奥林匹克的官方网站为参与信息学竞赛的老师同学们提供相关的信息和资源,请问全国信息学奥林匹克官方网站的网址是:
A)
http://www./
B)
http://www.noi.org/
C)
http://www./
D)
http://www./
二.
不定项选择题
(共10题,每题1.5分,共计15分。每题正确答案的个数不少于1。多选或少选均不得分)。
1、关于CPU下面哪些说法是正确的:
A)
CPU全称为中央处理器(或中央处理单元)。
B)
CPU能直接运行机器语言。
C)
CPU最早是由Intel公司发明的。
D)
同样主频下,32位的CPU比16位的CPU运行速度快一倍。
2、关于计算机内存下面的说法哪些是正确的:
A)
随机存储器(RAM)的意思是当程序运行时,每次具体分配给程序的内存位置是随机而不确定的。
B)
一般的个人计算机在同一时刻只能存/取一个特定的内存单元。
C)
计算机内存严格说来包括主存(memory)、高速缓存(cache)和寄存器(register)三个部分。
D)
1MB内存通常是指1024
1024字节大小的内存。
3、关于操作系统下面说法哪些是正确的:
A.
多任务操作系统专用于多核心或多个CPU架构的计算机系统的管理。
B.
在操作系统的管理下,一个完整的程序在运行过程中可以被部分存放在内存中。
C.
分时系统让多个用户可以共享一台主机的运算能力,为保证每个用户都得到及时的响应通常会采用时间片轮转调度的策略。
D.
为了方便上层应用程序的开发,操作系统都是免费开源的。
4、关于计算机网络,下面的说法哪些是正确的:
A)
网络协议之所以有很多层主要是由于新技术需要兼容过去老的实现方案。
B)
新一代互联网使用的IPv6标准是IPv5标准的升级与补充。
C)
TCP/IP是互联网的基础协议簇,包含有TCP和IP等网络与传输层的通讯协议。
D)
互联网上每一台入网主机通常都需要使用一个唯一的IP地址,否则就必须注册一个固定的域名来标明其地址。
5、关于HTML下面哪些说法是正确的:
A)
HTML全称超文本标记语言,实现了文本、图形、声音乃至视频信息的统一编码。
B)
HTML不单包含有网页内容信息的描述,同时也包含对网页格式信息的定义。
C)
网页上的超链接只能指向外部的网络资源,本网站网页间的联系通过设置标签来实现。
D)
点击网页上的超链接从本质上就是按照该链接所隐含的统一资源定位符(URL)请求网络资源或网络服务。
6、若3个顶点的无权图G的邻接矩阵用数组存储为{{0,1,1},{1,0,1},{0,1,0}},假定在具体存储中顶点依次为:
v1,v2,v3
关于该图,下面的说法哪些是正确的:
A)
该图是有向图。
B)
该图是强连通的。
C)
该图所有顶点的入度之和减所有顶点的出度之和等于1。
D)
从v1开始的深度优先遍历所经过的顶点序列与广度优先的顶点序列是相同的。
7、在带尾指针(链表指针clist指向尾结点)的非空循环单链表中每个结点都以next字段的指针指向下一个节点。假定其中已经有2个以上的结点。下面哪些说法是正确的:
A)
如果p指向一个待插入的新结点,在头部插入一个元素的语句序列为:
p^.next:=
clist^.next;
clist^.next:=
p;
B)
如果p指向一个待插入的新结点,在尾部插入一个元素的语句序列为:
p^.next:=
clist;
clist^.next:=
p;
C)
在头部删除一个结点的语句序列为:
p:=
clist^.next;
clist^.next:=
clist^.next^.next;
dispose(p);
D)
在尾部删除一个结点的语句序列为。
p:=
clist;
clist:=
clist
^.next;
dispose(p);
8、散列表的地址区间为0-10,散列函数为H(K)=K
mod
11。采用开地址法的线性探查法处理冲突,并将关键字序列26,25,72,38,8,18,59存储到散列表中,这些元素存入散列表的顺序并不确定。假定之前散列表为空,则元素59存放在散列表中的可能地址有:
A)
5
B)
7
C)
9
D)
10
9、排序算法是稳定的意思是关键码相同的记录排序前后相对位置不发生改变,下列哪些排序算法是稳定的:
A)
插入排序
B)
基数排序
C)
归并排序
D)
冒泡排序
10、在参加NOI系列竞赛过程中,下面哪些行为是被严格禁止的:
A)
携带书写工具,手表和不具有通讯功能的电子词典进入赛场。
B)
在联机测试中通过手工计算出可能的答案并在程序里直接输出答案来获取分数。
C)
通过互联网搜索取得解题思路。
D)
在提交的程序中启动多个进程以提高程序的执行效率。
三.问题求解(共2题,每空5分,共计10分)
1.拓扑排序是指将有向无环图G中的所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若
∈E(G),则u在线性序列中出现在v之前,这样的线性序列成为拓扑序列。如下的有向无环图,对其顶点做拓扑排序,则所有可能的拓扑序列的个数为
。
2.某个国家的钱币面值有1,
7,
72,
73共计四种,如果要用现金付清10015元的货物,假设买卖双方各种钱币的数量无限且允许找零,那么交易过程中至少需要流通
张钱币。
四.阅读程序写结果(共4题,每题8分,共计32分)
1.
var
a,
b:
integer;
function
work(a,
b:
integer):
integer;
begin
if
a
mod
b
<>
0
then
work
:=
work(b,
a
mod
b)
else
work
:=
b;
end;
begin
read(a,
b);
writeln(work(a,
b));
end.
输入:123
321
输出:_________
2.
var
a,
b:
array[0..3]
of
integer;
i,
j,
tmp:
integer;
begin
for
i
:=
0
to
3
do
read(b[i]);
for
i
:=
0
to
3
do
begin
a[i]
:=
0;
for
j
:=
0
to
i
do
begin
inc(a[i],
b[j]);
inc(b[a[i]
mod
4],
a[j]);
end;
end;
tmp
:=
1;
for
i
:=
0
to
3
do
begin
a[i]
:=
a[i]
mod
10;
b[i]
:=
b[i]
mod
10;
tmp
:=
tmp
(a[i]
+
b[i]);
end;
writeln(tmp);
end.
输入:2
3
5
7
输出:_______________
3.
const
y
=
2009;
maxn
=
50;
var
n,
i,
j,
s:
longint;
c:
array[0..maxn,
0..maxn]
of
longint;
begin
s
:=
0;
read(n);
c[0,
0]
:=
1;
for
i
:=
1
to
n
do
begin
c[i,
0]
:=
1;
for
j
:=
1
to
i
-
1
do
c[i,
j]
:=
c[i-1,
j-1]
+
c[i-1,
j];
c[i,
i]
:=
1;
end;
for
i
:=
0
to
n
do
s
:=
(s
+
c[n,
i])
mod
y;
write(s);
end.
输入:17
输出:
4.
var
n,
m,
i,
j,
k,
p:
integer;
a,
b:
array[0..100]
of
integer;
begin
read(n,
m);
a[0]
:=
n;
i
:=
0;
p
:=
0;
k
:=
0;
repeat
for
j
:=
0
to
i
-
1
do
if
a[i]
=
a[j]
then
begin
p
:=
1;
k
:=
j;
break;
end;
if
p
<>
0
then
break;
b[i]
:=
a[i]
div
m;
a[i+1]
:=
(a[i]
mod
m)
10;
inc(i);
until
a[i]
=
0;
write(b[0],
'.');
for
j
:=
1
to
k
-
1
do
write(b[j]);
if
p
<>
0
then
write('(');
for
j
:=
k
to
i
-
1
do
write(b[j]);
if
p
<>
0
then
write(')');
writeln;
end.
输入:5
13
输出:_________
五.完善程序
(前5空,每空2分,后6空,每空3分,共28分)
1.(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3,2,4时,输出9和3;数列为1
2
3
-5
0
7
8时,输出16和7。
var
a:
array[1..100]
of
integer;
n,
i,
ans,
len,
tmp,
beg:
integer;
begin
read(n);
for
i
:=
1
to
n
do
read(a[i]);
tmp
:=
0;
ans
:=
0;
len
:=
0;
beg
:=
①
;
for
i
:=
1
to
n
do
begin
if
tmp
+
a[i]
>
ans
then
begin
ans
:=
tmp
+
a[i];
len
:=
i
-
beg;
end
else
if
(
②
)
and
(i
-
beg
>
len)
then
len
:=
i
-
beg;
if
tmp
+
a[i]
③
then
begin
beg
:=
④
;
tmp
:=
0;
end
else
⑤
;
end;
writeln(ans,
'
',
len);
end.
2.
(寻找等差数列)
有一些长度相等的等差数列(数列中每个数都为0~59的整数),设长度均为L,将等差数列中的所有数打乱顺序放在一起。现在给你这些打乱后的数,问原先,L最大可能为多大?先读入一个数n(1<=n<=60),再读入n个数,代表打乱后的数。输出等差数列最大可能长度L。
var
hash:
array[0..60]
of
integer;
n,
x,
ans,
maxnum,
i:
integer;
function
work(now:
integer):
boolean;
var
ok:
boolean;
first,
second,
delta,
i:
integer;
begin
while
((
①
)
and
(hash[now]=0))
do
inc(now);
if
now
>
maxnum
then
begin
work
:=
true;
exit;
end;
first
:=
now;
for
second
:=
first
to
maxnum
do
if
hash[second]
>
0
then
begin
delta
:=
②
;
if
first
+
delta
③
>
maxnum
then
break;
if
delta
=
0
then
ok
:=
(
④
)
else
begin
ok
:=
true;
for
i
:=
0
to
ans
-
1
do
ok
:=
⑤
and
(hash[first+delta
i]>0);
end;
if
ok
then
begin
for
i
:=
0
to
ans
-
1
do
dec(hash[first+delta
i]);
if
work(first)
then
begin
work
:=
true;
exit;
end;
for
i
:=
0
to
ans
-
1
do
inc(hash[first+delta
i]);
end;
end;
work
:=
false;
end;
begin
fillchar(hash,
sizeof(hash),
0);
read(n);
maxnum
:=
0;
for
i
:=
1
to
n
do
begin
read(x);
inc(hash[x]);
if
x
>
maxnum
then
maxnum
:=
x;
end;
for
ans
:=
n
downto
1
do
if
(n
mod
ans
=
0)
and
⑥
then
begin
writeln(ans);
break;
end;
end.
3
2
1
5
4
7
6
8
997
全国分区联赛
高中组(初赛)
第三届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题(高中组)
(
Pascal
语言
竞赛用时:2小时)
●●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效
●●
一.基础部份:
〈1〉WPS
是属于
类软件;
FOXBASE
是属于
类软件。
用FOXBASE的命令:
CREATE
GZB,在磁盘中生成的是
文件。
〈2〉在MS
DOS的根目录中,有如下文件:
TIME.EXE
TIME.BAT
试问:C:
\
>
TIME〈回车〉
执行的是什么命令?
〈3〉已知
ASCII码表中的大写字母后有6个其他字符,
接着便是小写字母。现已知:A字母的ASCII码为
(41)16
{表示十六进制数41},试写出如下字母用十进制表示的ASCII码:
G-→(
)10
b
-→(
)10
t
-→(
)10
〈4〉
设数组A
[
10..100
,
20..100
]
以行优先的方式顺序存储,每个元素占4个字节,且已知A
[
10
,
20
]
的地址为1000,则A
[
50
,
90
]
的地址是
。
〈5〉一个汉字的机内码目前通常用二个字节来表示:第一个字节是区位码的区号加
(160)10;
第二个字节是区位码的位码加
(160)10
。
已知:汉字“却”的区位码是4020,试写出机内码两个字节的二进制的代码:
□□□□□□□□,□□□□□□□□
〈6〉下图中用点表示城市,点与点之间的联线表示城市间的道路:
试问:①
能否找出一条从A城市出发,经过图中所有道路一次后又回到
出发点的通路来?
②
能否从A出发,找出去每个城市且只去一次的通路来?
若能,则写出通路,否则说明理由。
〈7〉为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为前缀
{运算符在前,如X/Y写为
/
XY}
和后缀
{运算符在后,如X
/
Y写为X
Y
/
}
的表达形式。
在这样的表示中可以不用括号即可确定求值的顺序,如:
(P+Q)*(R-S)→
*+PQ-RS
或→
RQ+RS-*
①
试将下面的表达式改写成前缀与后缀的表示形式:
〈a〉A+B*C/
D
〈b〉A-C*D+B∧E
②
试将下面的前缀表示还原成中缀的表示形式,同时写出后缀表示:
+△A*B△C
{前缀式中△表示一元运算符取负号,如△A表示
(-A)}
〈8〉一个将角编了号的正三角形可以进行如下二种运动:
<
a
>
沿过顶点1的高h翻转180°,我们将这个运动用字母a来表示:
<
b
>
沿过三角形的外心,垂直于三角形所在平面的有向轴L
(注意:三角形翻转时L轴也随着翻转的),按右手法则旋转120°(右手法则是指用右手大拇指指向L轴的方向,由其余四指决定旋转方向的法则),我们将这样的运动用字母b来表示:
如果将a,b作为运算对象,并将两个运动连续进行看作一种运算(这里不妨也称为乘法),则对图一的三角形而言,aa的结果便成为:
若将运动前后的三角形状态简称为元素,那么三角形状态就可与运动的表达式关联起来。据此,请回答如下问题:
①
从图一的三角形的原始状态出发,可以运动出多少种不同状态的三角形,试写出最简单的运算表达式(借助于a
,
b与乘法运算);
②
这样定义的乘法运算是否符合交换律与结合律?
③
如果将从三角形的某种状态运动回到原始状态称之为该元素的逆元素,例如:
∴
bb的逆元素为b,可表示为
(bb)
–1
=b
试求:
(1)
a
-1
=
(2)
(ab)-1
=
(3)
((aa)
a)-1
=
(4)
b
-1
=
二.根据题意,补充完善以下程序:
1.[问题描述]:一个正整数(非素数)可以表示成它的因子(1与其本身除外)的乘积。
例如:
12有因子2
,
2
,
3
,
4
,
6,所以可表示为:
12
=2
2
3
=
4
3
=2
6
给出任一个正整数N,求出它所有的因子乘积的表达式(交换律得出的不同式子算同一种)。
[算法说明]:读入一个整数N,首先求出它的所有的因子以及每个因子可能的次数。
例如:整数48:
因子:
2
3
4
6
8
12
16
24
次数:
4
1
2
1
1
1
1
1
将上面的结果存入数组
A
:
ARRAY
[
0
..
20
,
1
..
2
]中,其中:
A[
i
,
1
]表示因子;
A[
i
,
2
]表示次数。
然后用简单回溯的方法求出所有可能的表示:
数组B[
0
..
20
]记录取数情况;
C
:
ARRAY
[
0
..
20
]工作单元。
[程序清单]:
program
exp4
(
input
,
output
);
var
a
:
array
[
0..20
,
1..2
]
of
integer;
c
,
b
:
array
[
0..20]
of
integer;
n
,
m
,
i
,
j
,
s
,
k
,
L
:
integer;
Begin
readln
(n);
for
i
:=
1
to
20
do
a
[
i
,
1
]:=
0;
①
;
a
[
0
,
2
]:=1;
j:=0;
for
i
:=
2
to
n-1
do
begin
s
:=
0;
m
:=
n;
while
(
m
<
>
0)
and
(
m
mod
i
=
0
)
do
begin
m
:=
m
div
i;
②
;
end;
if
③
then
begin
j
:=
j
+
1;
④
;
a
[
j
,
2
]
:=
⑤
;
end
end;
for
i
:=
0
to
j
do
b
[
j
]
:=
0;
while
b[
0
]
=
0
do
begin
k
:=
j;
while
⑥
do
k
:=
k
-1;
b
[
k
]:=
b
[
k
]
+
1;
for
L:=
⑦
do
b
[
L
]:=
0;
s
:=
1;
for
i
:=
1
to
j
do
if
b
[
i
]
<
>
0
then
for
L
:=
1
to
b
[
i
]
do
⑧
;
if
s
=
n
then
begin
for
i
:=
1
to
j
do
c
[
i
]:=
b
[
i
];
write
(
‘(’
);
m
:=
1;
for
i
:=1
to
j
do
while
(
c
[
i
]
>
0
)
and
(
m
<
>
n
)
do
begin
m
:=
m
a
[
i
,
1
];
if
m
=
n
then
write
(
a
[
i
,
1
]
)
else
begin
write
(
a
[
i
,
1
]
,
‘
’
);
c
[
i
]
:=
c
[
i
]
–
1;
end;
end;
writeln
(
‘)’
);
end
end;
End.
2.[问题描述]:给出一个凸多边形,可以取得若干个内接三角形,同时约定内接三角形必须有一条边(仅能有一条边)与凸多边形的边相重合,例如:下面的5边形中,可能有的内接三角形有5种:
问题:
当依次给出凸多边形的每个顶点的2个坐标之后,找出一个面积最大的内接三角形,输出该三角形的面积与三个顶点的坐标。
[算法说明]:凸多边形的每个顶点用一对坐标(x
,
y)表示;
用数组p:array
[1..n]
of
point;
存储输入的顶点坐标;
同时编制一个由三角形的三个顶点计算其面积的函数SEA。
[程序清单]:
program
exp5
(
input
,
output
);
const
n
=
6;
type
point
=record
x
,
y
:
real;
end;
var
p
:
array
[
1
..
2
n
]
of
point;
i
,
j
:
integer;
q1
,
q2
,
q3
:
point;
smax
:
real;
function
sea
(
p1,
p2
,
p3
:
point
)
:
real;
var
s1
,
s2
,
s3
,
s4
:
real;
begin
s1:=
sqrt
(
(p1.x
-
p2.x)
(p1.x
-
p2.x)
+
(p1.y
-
p2.y)
(p1.y
-
p2.y)
);
s2:=
sqrt
(
(p1.x
–
p3.x)
(p1.x
–
p3.x)
+
(p1.y
–
p3.y)
(p1.y
–
p3.y)
);
s3:=
sqrt
(
(p2.x
–
p3.x)
(p2.x
–
p3.x)
+
(p2.y
–
p3.y)
(p2.y
–
p3.y)
);
p4:=
①
;
sea:=
sqrt
(
p4
(p4
–
s1)
(p4
-
s2)
(p4
-
s3)
);
end;
Begin
for
i:=1
to
n
do
readln
(
p[
i
].x
,
p[
i
].y
);
smax:=0;
for
i:=1
to
n-1
do
②
for
i:=1
to
n
do
for
③
do
if
④
then
begin
smax
:=
sea
(p[
i
]
,
p[
i+1]
,
p[
j
]);
q1:=
p[
i
];
q2:=
⑤
;
q2:=
p[
j
]
end;
writeln
(
smax
,
q1.x
,
q1.y
,
q2.x
,
q2.y
,
q3.x
,
q3.y
)
End.
3.[问题描述]:拼图形:边长为1的正方形面积为1,从边长为1的正方形出发可以用2个边长为1的正方形拼成面积为2的长方形:
同时约定:
1.边长对应相等的长方形被认为是相同的;(所有左边的两个面积为2的长方形只看作一个长方形);
2.长度相等的边才能拼接,且两个边必须重合;
从面积为2的长方形出发,用2个面积为2的长方形可拼出面积为4的长方形(包括正方形),拼法如下:
同样再从面积为4的长方形(包括正方形)出发,可以拼成面积为8的长方形,拼法如下:
可以按上面的方法继续拼下去。
问题:输入一个数N,输出面积不超过N的所有可能拼法。例如:当N=20时,输出:
(1
,
1),(2
,
1),(4
,
2),(8
,
2),(16
,
3)即面积为1的拼法1种,面积为2的拼法1种,面积为4的拼法2种,面积为8的拼法2种,面积为16的拼法3种。
[算法说明]:矩形可以用三个数x
,
y
,
s来表示,其中x
,
y
表示边长,s表示面积,并用数组G[
1..100
,
1..3
]
表示图形。
拼接过程为:
有二种拼法:
当给出n之后,可能拼接的次数为r满足:2
r≤N<2r+1
(不包括面积为1的拼法);
用数组b[1..100]记录各种面积可能出现的拼法。
[程序清单]:
program
exp8
(
input
,
output
);
type
g
=
record
x
,
y
,
z
:
integer
end;
var
g1
:
array
[
1..100
]
of
g;
i
,
j
,
n
,
s1
,
jj
,
j1
,
j2
,
i1
:
integer;
b
:
array
[
1..100
]
of
integer;
gw
:
g;
function
eq
(gk
:
g)
:
boolean;
var
jeq
:
integer;
p
:
boolean;
begin
p:=
true;
jeq:=1;
while
(
p
and
(
jeq
<
=
j
)
)
do
if
(
(
gk.x
=
g1[
jeq
].x
)
and
(
gk.y
=
g1[
jeq
].y
)
)
or
(
(
gk.x
=
g1[
jeq
].y
)
and
(gk.y
=
g1[
jeq
].x
)
)
then
p:=false
else
jeq:=
jeq
+1;
eq:=p
end;
Begin
readln
(n);
s1:=1;
jj
:=
1;
while
①
do
begin
②
;
jj
:=
jj
+
1
end;
③
;
j1:=
1;
j
:=
1;
g1[
j
].x
:=
1;
g1[
j
].y
:=
1;
g1[
j
].z
:=
1;
for
i
:=2
to
jj
do
begin
j2
:=
j;
for
i1:=j1
to
j2
do
begin
gw.x
:=
g1[i1].x
2;
gw.y
:=
g1[i1].y;
gw.z
:=
g1[i1].z
2;
if
④
then
begin
j:=
j
+
1;
g1[
j
]:=
gw
end;
gw.x
:=
g1[
i1].x;
⑤
;
if
eq
(gw)
then
begin
j
:=
j
+
1;
⑥
;
end;
end;
j1
:=
j2
+
1
end;
for
i:=1
to
n
do
b[
i
]
:=
0;
for
i:=1
to
j
do
⑦
;
for
i:=1
to
n
do
if
⑧
then
write
(
‘(’
,
i
,
‘
,’
,
b[i]
,
‘
)’
);
End.
A
D
C
B
E
F
a
3
1
2
h
2
1
3
h
2
1
3
h
L
1
2
3
h
L
b
3
1
2
1
2
3
bb
3
1
2
2
3
1
3
1
2
b
bb
△ACD
,
△BDE
,
△CEA
,
△DAB
,
△EBC
B
A
C
E
D
y
x
x
y
y
y
x
x
或
·2·2001
全国分区联赛
高中组(初赛)
第七届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题
(提高组PASCAL语言 二小时完成)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一.
选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题1.5分,多选无分,共30分)
1、中央处理器CPU能访问的最大存储器容量取决于(
)
A)
地址总线
B)
数据总线
C)
控制总线
D)
内存容量
2、计算机软件保护法是用来保护软件(
)的。
A)
编写权
B)
复制权
C)
使用权
D)
著作权
3、64KB的存储器用十六进制表示,它的最大的地址码是(
)
A)
10000
B)
FFFF
C)
1FFFF
D)
EFFFF
4、在树型目录结构中,不允许两个文件名相同主要指的是(
)
A)同一个磁盘的不同目录下
B)不同磁盘的同一个目录下
C)不同磁盘的不同目录下
D)同一个磁盘的同一个目录下
5、下列设备哪一项不是计算机输入设备(
)
A)
鼠标
B)
扫描仪
C)
数字化仪
D)
绘图仪
6、在计算机硬件系统中,cache是(
)存储器
A)
只读
B)
可编程只读
C)
可擦除可编程只读
D)高速缓冲
7、若我们说一个微机的CPU是用的PII300,此处的300确切指的是(
)
A)
CPU的主时钟频率
B)
CPU产品的系列号
C)
每秒执行300百万条指令
D)
此种CPU允许最大内存容量
8、Email邮件本质上是一个(
)
A)
文件
B)
电报
C)
电话
D)
传真
9、2KB的内存能存储(
)个汉字的机内码
A)
1024
B)
516
C)
2048
D)
218
10、以下对Windows的叙述中,正确的是(
)
A)
从软盘上删除的文件和文件夹,不送到回收站
B)
在同一个文件夹中,可以创建两个同类、同名的文件
C)
删除了某个应用程序的快捷方式,将删除该应用程序对应的文件
D)
不能打开两个写字板应用程序
11、运算式(2047)10
-
(3FF)16+
(2000)8的结果是(
)
A)
(2048)10
B)
(2049)10
C)
(3746)8
D)
(1AF7)16
12、TCP/IP协议共有(
)层协议
A)
3
B)
4
C)
5
D)
6
13、若已知一个栈的入栈顺序是1,2,3,…,n,其输出序列为P1,P2,P3,…,Pn,若P1是n,则Pi是(
)
A)
i
B)
n-1
C)
n-i+1
D)
不确定
14、计算机病毒是(
)
A)
通过计算机传播的危害人体健康的一种病毒
B)
人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合
C)
一种由于计算机元器件老化而产生的对生态环境有害的物质
D)
利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒
15、下面关于算法的错误说法是(
)
A)
算法必须有输出
B)
算法必须在计算机上用某种语言实现
C)
算法不一定有输入
D)
算法必须在有限步执行后能结束
16、[
x
]补码=10011000,其原码为(
)
A)
011001111
B)
11101000
C)
11100110
D)
01100101
17、以下哪一个不是栈的基本运算(
)
A)
删除栈顶元素
B)
删除栈底的元素
C)
判断栈是否为空
D)
将栈置为空栈
18、在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为(
)
A)
2
B)
3
C)
4
D)
5
19、一棵二叉树的高度为h,所有结点的度为0,或为2,则此树最少有(
)个结点
A)
2h-1
B)
2h-1
C)
2h+1
D)
h+1
20、无向图G=(V,E),其中V={
a
,
b
,
c
,
d
,
e
,
f
}
E={
(a
,
b)
,
(a
,
e)
,
(a
,
c)
,
(b
,
e)
,
(c
,
f)
,
(f
,
d)
,
(e
,
d)
}?
对该图进行深度优先遍历,得到的顶点序列正确的是(
)
?
A)
a,b,e,c,d,f
B)
a,c,f,e,b,d
C)
a,e,b,c,f,d
D)
a,b,e,d,f,c
二.问题求解(5+7,共12分)
1、已知一棵二叉树的结点名为大写英文字母,其中序与后序遍历的顺序分别为:CBGEAFHDIJ与CGEBHFJIDA则该二叉树的先序遍历的顺序为:
2、平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。问用这些点为顶点,能组成多少个不同四边形?
三.阅读程序,并写出正确的运行结果(4
+
7
+
8
+
9,共28分)
1.
PROGRAM
GAO7_1:
FUNCTION
ACK(M
,
N:INTEGER):INTEGER;
BEGIN
IF
M=0
THEN
ACK:=N+1
ELSE
IF
N=0
THEN
ACK:=ACK(M-1,1)
ELSE
ACK:=ACK(M-1,ACK(M,N-1))
END;
BEGIN??
WRITELN(ACK(3,4));
READLN;
END.
输出:
2.
PROGRAM?
GAO7_2;
VAR
P,Q,S,T:INTEGER;
BEGIN
READLN(P);
FOR
Q:=P+1
TO
2
P
DO
BEGIN
T:=0;
S:=(P
Q)
MOD
(Q-P);
IF
S=0
THEN
BEGIN
T:=P+Q+
(P
Q)
DIV
(Q-P);
WRITE(T:4);
END;
END;
END.
输入:12
输出:
3.
PROGRAM
GAO7_3;
VAR
I,J,H,M,N,K:INTEGER;
B?:ARRAY[1..10]
OF
INTEGER;
BEGIN
READLN(N);
FOR
I:=1
TO
10
DO
BEGIN
M
:=N;
J:=11;
WHILE
M
>
0
DO
BEGIN
J:=J-1;
B[J]:=M
MOD
10;
M:=M
DIV
10
?
END;
FOR
H:=J
TO
10
DO?
N:=N+B[H];
END;
WRITELN(N);
END.
输入1234
输出:
4.
PROGRAM
GAO7_4;
VAR
X,Y1,Y2,Y3:INTEGER;
BEGIN
READLN(X);
Y1:=0;
Y2:=1;
Y3:=1;
WHILE
Y2<=X
DO
BEGIN
Y1:=Y1+1;
Y3:=Y3+2;
Y2:=Y2+Y3
END;
WRITELN(Y1);
END.
输入:23420
输出:
四.完善程序(共38分)
1、存储空间的回收算法。设在内存中已经存放了若干个作业A,B,C,D。其余的空间为可用的(如图一中(a))。
此时,可用空间可用一个二维数组dk[1..100,1..2
]表示,(如下表一中(a)),其中:dk[i,1]对应第i个可用空间首址,dk[i,2]对应第i个可用空间长度如上图中,dk:
100
50
300
100
50
100
0010050300100500100100000
表一(a)
表一(b)
现某个作业释放一个区域,其首址为d,长度为L,此时将释放区域加入到可用空间表中。要求在加入时,若可用空间相邻时,则必须进行合并。因此出现下面的4种情况(如上图一(b)所示)。
(1)下靠,即回收区域和下面可用空间相邻,例如,d=80,L=20,此时成为表二中的(a)。
(2)上靠,例如,d=600,L=50,此时表成为表二中的(b)。
(3)上、下靠,例如,d=150,L=150,此时表成为表二中的(c)。
(4)上、下不靠,例如,d=430,L=20,此时表成为表二中的(d)。
80
70
300
100
50
100
10050300100500150
100300500100
1005030010043020500100
表二(a)(下靠)
表二(b)(上靠)
表二(c)(上,下靠)
表二(d)(上,下不靠)
程序说明:对数组dk预置2个标志,即头和尾标志,成为表二中(b),这样可使算法简单,sp为dk表末地址。
程序清单:
PROGRAM
GAO7_5;
VAR??
I,J,SP,D,L:INTEGER;
DK??:ARRAY[0..100,1..2]OF
INTEGER;
BEGIN
READLN(SP);
FOR
I:=1
TO
SP
DO
READLN(DK[
I
,
1],DK[
I
,
2
]);
DK[
0
,
1
]:=0;
DK[
0
,
2
]:=0;
①
;
DK[SP
,
1]:=10000;
DK[SP
,
2]:=0;
READLN(D,L);
I:=1;
WHILE
DK[
I
,
1]DO
I:=I+1;
②
;
IF
(DK[
I
,
1]+DK[
I
,
2
]=D)
THEN
IF
(D+L=DK[
I+1
,
1])
THEN
BEGIN
DK[
I
,
2
]:=
③
;
FOR
J:=I+1
TO
SP-1
DO
DK[
J
]:=DK[
J+1];
SP:=SP-1;
END
ELSE
DK[
I
,
2
]:=DK[
I
,
2
]+L
ELSE
IF
(
D+L
=
DK[
I+1
,
1]
)
THEN
BEGIN
DK[
I+1
,
1
]:=
④
;
DK[
I+1
,
2
]:=DK[
I+1
,
2
]+L
END
ELSE
BEGIN
FOR
J:=SP
DOWNTO
I+1
DO
DK[
J+1]:=
DK[
J
];
⑤
:=D;
DK[
I+1
,
2
]:=L;
SP:=SP+1;
END;
FOR
I:=1
TO
SP-1
DO
WRITELN(DK[
I
,
1
]
:
4,DK[
I
,
2
]
:
4);
READLN;
END.
2、求关键路径
?
设有一个工程网络如下图表示(无环路的有向图):
?
其中,顶点表示活动,①表示工程开始,⑤表示工程结束(可变,用N表示),边上的数字表示活动延续的时间。
?
?
?
如上图中,活动①开始5天后活动②才能开始工作,而活动③则要等①、②完成之后才能开始,即最早也要7天后才能工作。
在工程网络中,延续时间最长的路径称为关键路径。
上图中的关键路径为:
①—②—③—④—⑤共18天完成。
关键路径的算法如下:
1.
数据结构:
R[1..N,1..N]
OF
INTEGER; 表示活动的延续时间,若无连线,则用-1表示;
?
EET[1..N]
表示活动最早可以开始的时间
?
ET[1..N]
表示活动最迟应该开始的时间
????
关键路径通过点J,具有如下的性质:
EET[
J
]
=
ET[
J
]
2.
约定:
?
结点的排列已经过拓扑排序,即序号前面的结点会影响序号后面结点的活动。
程序清单:
PROGRAM
GAO7_6;
VAR
I,J,N,MAX,MIN,W,X,Y:INTEGER;
R:ARRAY
[1..20,1..20] OF
INTEGER;
EET,ET:ARRAY
[1..20] OF
INTEGER;
BEGIN
READLN
(N)
FOR
I:=1
TO
N
DO
FOR
J:=1
TO
N
DO
R[I,J]:=
-1;
READLN(X,Y,W);
{输入从活动X到活动Y的延续时间,以0为结束}
WHILE
X<>0
DO
BEGIN
R[
X
,
Y
]:=W;
①
END;
EET[1]:=0;{认为工程从0天开始}
FOR
I:=2
TO
N
DO
BEGIN
MAX:=0;
FOR
J:=1
TO
N
DO
IF
R[J,I]<>-1
THEN
IF
②
THEN
MAX:=R[J,I]+EET[J];
EET[I]:=MAX;
END;
③
FOR
I:=N-1
DOWNTO
1
DO
BEGIN
MIN:=10000;
FOR
J:=1
TO
N
DO
IF
R[
I
,
J
]<>
-1
THEN
IF
④
THEN
MIN:=ET[J]
-
R[
I
,
J
];
ET[I]:=MIN;
END;
WRITELN(EET[N]);
FOR
I:=1
TO
N-1
DO
IF
⑤
THEN
WRITE
(I,'→');
WRITE
(N);
READLN
END.
·2·第十八届全国青少年信息学奥林匹克联赛初赛
提高组
Pascal语言试题
竞赛时间:2012年10月13日14:30~16:30
选手注意
试题纸共有15页,答题纸共有2页,满分100分。请在答题纸上作答,写在试题纸上
的一律无效
●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料
单项选择题(共10题,每题1.5分,共计15分;每题有且仅有一个正确选
项)
1.目前计算机芯片(集成电路)制造的主要原料是(),它是一种可以在沙子中提炼
出的物质
A.硅
B.铜
2.()是主要用于显示网页服务器或者文件系统的HTML文件内容,并让用户与这些
文件交互的一种软件。
A.资源管理器B.浏览器
C.电子邮件
D.编译器
3.目前个人电脑的()市场占有率最靠前的厂商包括
Intel,
AMD等公司
A.显示器
B.
CPU
C.内存
D.鼠标
4.无论是TCPP模型还是OSI模型,都可以视为网络的分层模型,每个网络协议都会被
某一层中。如果用现实生活中的例子来比喻这些“层”,以下最恰当的是()。
A.中国公司的经理与斯洛伐克公司的经理交互商业文件
第4层
中国公司经理
斯洛伐克公司经理
第3层
中国公司经理秘书
斯洛伐克公司经理秘书
第2层
中国公司翻译
斯洛伐克公司翻译
第1层
中国邮递
斯洛伐克邮递员
CCF
NOIP2012初赛
提高组
Pascal1
B.军队发布命令
第4层
司令
第3层
军长1
军长2
第2层
师长1
师长2
师长3
师长4
第1层团长1团长2团长3团长4团长5团长6团长7团长8
C.国际会议中,每个人都与他国地位对等的人直接进行会谈
第4层
英国女王
瑞典国王
第3层
英国首相
瑞典首相
第2层
英国外交大臣
瑞典外交大臣
第1层
英国驻瑞典大使
瑞典驻英国大使
D.体育比赛中,每一级比赛的优胜者晋级上一级比赛
第4层
奥运会
第3层
全运会
第2层
省运会
第1层
市运会
5.如果不在快速排序中引入随机化,有可能导致的后果是()
A.数组访问越界
B.陷入死循环
C.排序结果错误
D.排序时间退化为平方级
6.1946年诞生于美国宾夕法尼亚大学的ENAC属于()计算机。
A.电子管
B.晶体管
C.集成电路
D.超大规模集成电路
7.在程序运行过程中,如果递归调用的层数过多,会因为()引发错误。
A.系统分配的找空间溢出
B.系统分配的堆空间溢出
CCF
NOIP2012初赛
是高组
Pascal299
全国分区联赛
高中组(初赛)
第五届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题(高中组)
(
Pascal
语言
竞赛用时:2小时)
●●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效
●●
一.
选择一个正确答案代码(A/B/C/D),填入每题的括号内
(每题1.5分,多选无分,共30分)
1.
微机内存储器的地址是按(
)编址的。
A.
二进制位
B.
字长
C.
字节
D.
微处理器的型号
2.
下列诸因素中,对微机工作影响最小的是(
)
A.
尘土
B.
噪声
C.
温度
D.
湿度
3.
在24
24点阵的字库中,汉字“一”与“编”的字模占用字节数分别是(
)
A.
32,32
B.
32,72
C.
72,72
D.
72,32
4.
将DOS系统盘插入A驱动器启动机器,随后使用一批应用软件,在此过程中,DOS系统盘(
)
A.
必须始终插入在A驱动器中
B.
不必再用
C.
可能有时要插入A驱动器中
D.
可能有时要插入B驱动中
5.
以下DOS命令中,有可能在磁盘上建立子目录的是(
).
A.
type
B.
dir
C.
xcopy
D.cd
6.
在config.sys文件中,装入特定的可安装设备驱动程序的命令是(
).
A.
buffer
B.
files
C.
driver
D.
device
7.
计算机能直接执行的指令包括两部分,它们是(
).
A.
源操作数与目标操作数
B.操作码与操作数
C.
ASCII码与汉字代码
D.数字与字符
8.
在微机中,通用寄存器的位数是(
).
A.
8位
B.
16位
C.
计算机字长
D.
32位
9.
在计算机中,ASCII码是(
)位二进制代码
A.
8
B.
7
C.
12
D.
16
10.
计算机的软件系统通常分为(
)
A.
系统软件与应用软件
B.
高级软件与一般软件
C.
军用软件与民用软件
D.
管理软件与控制软件
11.
执行DOS命令:C>ATTRIB
A:
.
的功能是(
)
A.
查看A盘上所有文件属性
B.
查看A盘上当前目录中所有文件属性
C.
查看A盘上所有系统文件属性
D.
删去A盘上所有隐含文件的属性
12.
执件下列DOS命令,效果等价的是(
)组.
A.
copy
.
for
与
copy
.
for
con
B.
copy
A:
.
B:
与
xcopy
A:
.
B:
C.
copy
fole1.txt
+
file2.txt
与
copy
flle2.txt
+
file1.txt
D.
xcopy
A:
.
B:
/S
与
diskcopy
A:
B:
13.
已知小写字母‘m’的十六进制的ASCll码值是6D,则小写字母‘c’的十六进制的ASCII码值是(
)
A.
98
B.
62
C.
99
D.
63
14.
计算机中的数有浮点数与定点数两种,其中用浮点数表示的数,通常由(
)这两部分组成。
A.
指数与基数
B.
尾数与小数
C.
阶码与尾数
D.
整数与小数
15.
下列文件名中,属于DOS中的保留设备名的为(
)
A.
AUX
B.
COM
C.
CON
1
D.
PRN
1
16.
启动计算机引导DOS是将操作系统(
)
A.
从磁盘调入中央处理器
B.
从内存储器调入高速缓冲存储器
C.
从软盘调入硬盘
D.
从系统盘调入内存储器
17.
十进制算术表达式:3
512
+
7
64
+
4
8
+
5
的运算结果,用二进制表示为(
).
A.
10111100101
B.
11111100101
C.
11110100101
D.
11111101101
l8.
组成‘教授’(jiao
shou)‘副教授’(fu
jiao
shou)与‘讲师’(jiang
shi)这三个词的汉字,在GB2312-80字符集中都是一级汉字.对这三个词排序的结果是(
).
A.
教授,副教授,讲师
B.
副教授,教授,讲师
C.
讲师,副教授,教授
D.
副教授,讲师,教授
19.
不同的计算机,其指令系统也不同,这主要取决于(
).
A.
所用的操作系统
B.
系统的总体结构
C.
所用的CPU
D.
所用的程序设计语言
20.
对具有隐含属性(H)的当前目录下的文件
ab.
txt,能成功执行的
DOS命令是()
A.
TYPE
ab.txt
B.
COPY
ab.
txt
xy.
txt
C.
DIR
ab.txt
D.
REN
ab.
txt
xy.
txt
二.回答问题:
(共10分)
将Ln定义为求在一个平面中用n条直线所能确定的最大区域数目。
例如:当n=1时,L1=2,进一步考虑,用n条折成角的直线(角度任意),放在平面上,能确定的最大区域数目Zn是多少?例如:当n=1时,Z1=2
(如图所示)
当给出n后,请写出以下的表达式:
Ln=
Zn=
三.阅读程序,并写出程序的正确运行结果:
(每题15分,共30分)
1.
program
exgp1;
var
i
,
j
,
k
:
integer;
a
:
array
[0..100]
of
integer;
Begin
for
i:=0
to
100
do
a[i]:=i;
for
k:=5
downto
2
do
begin
for
i:=1
to
100
do
if(i
mod
k)=0
then
a[i]:=0;
for
i:=1
to
99
do
for
j:=1
to
100-i
do
if
a[j]>a[j+1]
then
begin
a[j]:=a[j]+a[j+1];
a[j+1]:=a[j]-a[j+1];
a[j]:=a[j]-a[j+1];
end;
end;
j:=1;
while
(a[j]=0)
and
(j<100)
do
j:=j+1;
for
i:=j
to
100
do
a[0]:=a[0]+a[i];
writeln(a[0]);
End
本题的运行结果是:
2.
设数组A[1],A[2],…A[N],已存入了数据,调入不同的排序程序,则数据比较的次数将会不同,试计算出分别调用下列不同的排序过程的比较运算的次数。
其中SWAP(I,J)表示A[
I
]与A[
J
]进行交换。
(1)
PROCEDURE
SORT1(N:INTEGER);
VAR
I
,
J
:
INTEGER;
BEGIN
FOR
I:=1
TO
N-1
DO
FOR
J:=1
TO
N
DO
IF
A[J]THEN
SWAP(I
,
J)
END
调用该过程的语句为SORT1
(
N
),比较运算的次数为:
(2)
PROCEDURE
SORT2
(
I
,
N
:
INTEGER
);
VAR
J:
INTEGER;
BEGIN
IF
I=N
THEN
WRITE
(A[N])
ELSE
FOR
J:=I+1
TO
N
DO
IF
A[
J
]I
]
THEN
SWAP(I
,
J)
WRITE
(A[
I
]);
SORT2
(I+1,
N)
END;
调用该过程的语句为SORT2
(
0
,
N),比较运算的次数为:
(3)
PROCEDURE
SORT3
(
I
,
J
:
INTEGER);
VAR
M
:
INTEGER;
BEGIN
IF
I
<>
J
THEN
BEGIN
M:=(I+J)
DIV
2;
SORT2
(I
,
M);
SORT3
(M+1
,
J);
MERGE;
{假设合并的元素分别为P、Q个,需要比较P+Q次}
END;
END;
调用该过程的语句为SORT3
(
0
,
N),比较运算的次数为:
四.根据题意,将程序补充完整(共30分)
1.【问题描述】求一棵树的深度与宽度。
【算法说明】
树可用数组tree:array[1..n
,1..5]
of
integer;
其中:tree[i,1]表示结点号;
tree[i,2]——tree[i,5]所属结点。
如右图可表示为:
在求解的过程中,用到数组g:array[1..n,1..7]
of
integer;
其中:g[i,1]表示父结点,g[i,2]表示层次,
g[i,3]表示本结点号,g[i,4]——g[i,7]表示子女结点;
同时,设2个指针SP1(取数指针),SP2(存数指针)
【程序清单】
program
excp3;
const
n=13;
var
i,j,k,sp1,sp2,n1,n2,jmax,p:integer;
tree:array[1..n,1..5]
of
integer;
g:array[1..n,1..7]
of
integer;
begin
for
i:=1
to
n
do
begin
tree[i,1]:=i;
for
j:=2
to
5
do
read(tree[i,j]);
readln;
end;
sp1:=1;
sp2:=1;
g[1,1]:=0;
g[1,2]:=1;
g[1,3]:=1;
for
i:=4
to
7
do
g[1,i]:=tree[1,i-2];
while
_____①_____
do
begin
p:=g[sp1,2];
n2:=g[sp1,3];
______②______;
j:=4;
while
_____③_____
do
begin
n1:=g[sp1,j];
j:=j+1;
______④______;
g[sp2,1]:=n2;
g[sp2,2]:=p;
g[sp2,3]:=n1;
for
i:=1
to
4
do
g[sp2,i+3]:=tree[n1,i+1];
end;
_____⑤_____;
end;
writeln(‘maxd=’,g[sp2,2]);
j:=1;
k:=g[1,2];
jmax:=0;
for
i:=2
to
sp2
do
if
____⑥____
then
j:=j+1
else
begin
if
j>jmax
then
jmax:=j;
_____⑦_____;
k:=g[i,2];
end;
if
j>jmax
then
jmax:=j;
writeln(‘maxl=’,jmax);
end
2.【问题描述】
用生成法求出1
,
2
,
……
,
r
的全排列(r
<
=
8)
【算法说明】用数组a:array[1..r]
of
integer;
表示排列;
初始化时,a[i]:=1
(
i=1,2,…,r
)
设中间的某一个排列为a[1],a[2],…,a[r]
则求出下一个排列的算法为:
①
从后面向前找,直到找到一个顺序为止
(设下标为j-1,则a[j-1]
②
从a[j]-a[r]中,找出一个a[k]比a[j-1]大的最小元素
③
将a[j-1]与a[k]交换
④
将a[j],a[j+1],…
a[r]由小到大排序。
【程序清单】
program
excp4;
const
r=7;
var
n,i,s,k,j,i1,t:integer;
a:array[1..r]
of
integer;
procedure
print1;
var
ik
;integer;
begin
for
ik:=1
to
r
do
write(a[ik]:8);
writeln;
end;
begin
for
i:=1
to
r
do
_____①_____;
print1;
s:=1;
for
i:=2
to
r
do
s:=s
i;
s:=s-1;
for
i:=_____②_____
do
begin
j:=r;
while
_____③_____
do
j:=j-1;
k:=j;
for
i1:=j+1
to
r
do
if
_____④_____
then
k:=i1;
t:=a[j-1];
a[j-1]:=a[k];
a[k]:=t;
for
i1:=j
to
r-1
do
for
k:=i1+1
to
r
do
if
_____⑤_____
then
begin
t:=a[i1];
a[i1]:=a[k];
a[k]:=t;
end;
print1;
end;
end
1
2
1
2
3
4
0
2
5
6
7
0
3
8
0
0
0
4
9
10
0
0
5
0
0
0
0
6
0
0
0
0
7
11
12
0
0
8
0
0
0
0
9
0
0
0
0
10
0
0
0
0
11
0
0
0
0
12
13
0
0
0
13
0
0
0
0
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
·2·第十六届全国青少年信息学奥林匹克联赛初赛试题试题及答案
NOIP2010(Pascal提高组)
一、单项选择题
1.与16进制数
A1.2等值的10进制数是
(
)
A.101.2?????????
B.111.4??????????
C.161.125??????????
D.177.25
2.一个字节(byte)由(???
)个二进制组成。
A.8?????????
B.16??????????
C.32??????????
D.以上都有可能
3.以下逻辑表达式的值恒为真的是(???
)。
A.P∨(┓P∧Q)∨(┓P∧┓Q)
B.Q∨(┓P∧Q)∨(P∧┓Q)
C.P∨Q∨(P∧┓Q)∨(┓P∧Q)
D.P∨┓Q∨(P∧┓Q)∨(┓P∧┓Q)
4.Linux下可执行文件的默认扩展名是(???
)。
A.
exe??????????
B.
com????????
C.????
dll????????
D.????
以上都不是
5.如果在某个进制下等式7
7=41成立,那么在该进制下等式12
12=(
)也成立。
A.
100????????
B.????
144????????
C.????
164????????
D.????
196
6.提出“存储程序”的计算机工作原理的是(
)。
A.
克劳德?香农????????
B.????
戈登?摩尔????????
C.????
查尔斯?巴比奇????????
D.????
冯?诺依曼
7.前缀表达式“+
3
2
+
5??
12
”
的值是(
)。
A.????
23????????
B.????
25????????
C.????
37????????
D.????
65
8.主存储器的存取速度比中央处理器(CPU)的工作速度慢的多,从而使得后者的效率受到影响。而根据局部性原理,CPU所访问的存储单元通常都趋于一个较小的连续区域中。于是,为了提高系统整体的执行效率,在CPU中引入了(??
)。
A.????
寄存器????????
B.????
高速缓存????????
C.????
闪存????????
D.????
外存
9.完全二叉树的顺序存储方案,是指将完全二叉树的结点从上到下、从左到右依次存放到一个顺序结构的数组中。假定根结点存放在数组的1号位置上,则第k号结点的父结点如果存在的话,应当存放在数组中的(??
)号位置。
A.????
2k????????
B.????
2k+1????????
C.
k/2下取整????????????
D.????
(k+1)/2
10.????
以下竞赛活动中历史最悠久的是(??
)。
A.
NOIP????????
B.????
NOI????????
C.????
IOI????????
D.????
APIO
二、不定项选择题
1.元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。如果第1个出栈的是R3,那么第5个出栈的可能是(??
)。
A.????
R1????????
B.????
R2????????
C.R4????????
D.R5
2.
Pascal语言,C语言和C++语言都属于(??
)。
A.????
高级语言????????
B.????
自然语言????????
C.????
解释性语言????????
D.????
编译性语言
3.
原地排序是指在排序过程中(除了存储待排序元素以外的)辅助空间的大小与数据规模无关的排序算法。以下属于原地排序的有(??
)。
A.????
冒泡排序????????
B.????
插入排序????????
C.????
基数排序????????
D.????
选择排序
4.
在整数的补码表示法中,以下说法正确的是(??
)。
A.只有负整数的编码最高位为1
B.在编码的位数确定后,所能表示的最小整数和最大整数的绝对值相同
C.整数0只有一个唯一的编码
D.两个用补码表示的数相加时,如果在最高位产生进位,则表示运算溢出
5.
一颗二叉树的前序遍历序列是ABCDEFG,后序遍历序列是CBFEGDA,则根结点的左子树的结点个数可能是(??
)。
A.0????????
B.????
2????????
C.????
4????????
D.????
6
6.
在下列HTML语句中,可以正确产生一个指向NOI官方网站的超链接的是(??
)。
A.url=”h
t
t
p
:
/
/
w
w
w
.
n
o
i
.
c
n”>欢迎访问NOI网站
B.href=”h
t
t
p
:
/
/
w
w
w
.
n
o
i
.
c
n”>欢迎访问NOI网站
C.h
t
t
p
:
/
/
w
w
w
.
n
o
i
.
c
n
D.name”h
t
t
p
:
/
/
w
w
w
.
n
o
i
.
c
n”>欢迎访问NOI网站
7.
关于拓扑排序,下列说法正确的是(??
)。
A.所有连通的有向图都可以实现拓扑排序
B.对同一个图而言,拓扑排序的结构是唯一的
C.拓扑排序中入度为0的结点总会排在入度大于0的结点的前面
D.拓扑排序结果序列中的第一个结点一定是入度大于0的点
8.
一个平面的法线是指与该平面垂直的直线。过点(1,1,1)、(0,3,0)、(2,0,0)的平面的法线是(??
)。
A.过点(1,1,1)、(2,3,3)的直线
B.过点(1,1,1)、(3,2,1)的直线
C.过点(0,3,0)、(-3,1,1)的直线
D.过点(2,0,0)、(5,2,1)的直线
9.双向链表中有两个指针域llink和rlink,分别指向该结点的前驱及后继。设p指向链表中的一个结点,他的左右结点均为非空。现要求删除结点p,则下列语句序列中正确的是
(???
)。
A.p->rlink->llink=p->rlink;
????
p->llink->rlink=p->llink;
delete
p;
B.p->llink->rlink=p->rlink;
????
p->rlink->llink
=
p->llink;
delete
p;
C.p->rlink->llink
=
p->llink;
????
p->rlink->llink
->rlink
=
p->rlink;
delete
p;
D.p->llink->rlink
=
p->rlink;
????
p->llink->rlink->link
=
p->llink;
delete
p;
10.
今年(2010年)发生的事件有(??
)。
A.惠普实验室研究员Vinay
Deolalikar
自称证明了P≠NP
B.英特尔公司收购计算机安全软件公司迈克菲(McAfee)
C.苹果公司发布iPhone
4手机
D.微软公司发布Windows
7
操作系统
三、问题求解
1.LZW编码是一种自适应词典编码。在编码的过程中,开始时只有一部基础构造元素的编码词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的编码会被追加到词典中,并用于后继信息的编码。
????
举例说明,考虑一个待编码的信息串:“xyx
yy
yy
xyx”。初始词典只有3个条目,第一个为x,编码为1;第二个为y,编码为2;第三个为空格,编码为3;于是串“xyx”的编码为1-2-1(其中-为编码分隔符),加上后面的一个空格就是1-2-1-3。但由于有了一个空格,我们就知道前面的“xyx”是一个单词,而由于该单词没有在词典中,我们就可以自适应的把这个词条添加到词典里,编码为4,然后按照新的词典对后继信息进行编码,以此类推。于是,最后得到编码:1-2-1-3-2-2-3-5-3-4。
????
我们可以看到,信息被压缩了。压缩好的信息传递到接受方,接收方也只要根据基础词典就可以完成对该序列的完全恢复。解码过程是编码过程的逆操作。现在已知初始词典的3个条目如上述,接收端收到的编码信息为2-2-1-2-3-1-1-3-4-3-1-2-1-3-5-3-6,则解码后的信息串是”____________”。
2.无向图G有7个顶点,若不存在由奇数条边构成的简单回路,则它至多有__________条边。
3.记T为一队列,初始时为空,现有n个总和不超过32的正整数依次入列。如果无论这些数具体为何值,都能找到一种出队的方式,使得存在某个时刻队列T中的数之和恰好为9,那么n的最小值是___________。
四、阅读程序写结果
1.
const
???
size
=
10;
var
???
i,
j,
cnt,
n,
m
:
integer;
???
data
:
array[1..size]
of
integer;
begin
???
readln(n,
m);
???
for
i
:=
1
to
n
do
??????
read(data[i]);
???
for
i
:=
1
to
n
do
???
begin
??????
cnt
:=
0;
??????
for
j
:=
1
to
n
do
?????????
if
(data[i]
<
data[j])
or
((data[j]
=
data[i])
and
(j
<
i))
????????????
then
inc(cnt);
??????
if
cnt
=
m
?????????
then
writeln(data[i]);
???
end;
end.
输入
5
2
96
-8
0
16
87
输出:__________
2.
const
???
size
=
100;
var
???
na,
nb,
i,
j,
k
:
integer;
???
a,
b
:
array[1..size]
of
integer;
begin
???
readln(na);
???
for
i
:=
1
to
na
do
???????
read(a[i]);
???
readln(nb);
???
for
i
:=
1
to
nb
do
???????
read(b[i]);
???
i
:=
1;
???
j
:=
1;
???
while
(i
<=
na)
and
(j
<=
nb)
do
???
begin
??????
if
a[i]
<=
b[j]
then
??????
begin
?????????
write(a[i],'
');
?????????
inc(i);
??????
end
??????
else
begin
?????????
write(b[j],
'
');
?????????
inc(j);
??????
end;
???
end;
???
if
i
<=
na
then
??????
for
k
:=
i
to
na
do
?????????
write(a[k],
'
');
???
if
j
<=
nb
then
??????
for
k
:=
j
to
nb
do
?????????
write(b[k],
'
');
end.
输入
5
1
3
5
7
9
4
2
6
10
14
输出:__________
3.
const
???
num
=
5;
var
???
n:
integer;
function
r(n
:
integer)
:
integer;
var
???
i
:
integer;
begin
???
if
n
<=
num
then
???
begin
??????
r
:=
n;
??????
exit;
???
end;
???
for
i
:=1
to
num
do
??????
if
r(n-i)
<
0
then
??????
begin
????????
r:=i;
????????
exit;
??????
end;
???
r:=-1;
end;
begin
???
readln(n);
???
writeln(r(n));
end.
输入
16
输出:__________
4.
const
???
size=100;
var
??
n,m,x,y,i
:integer;
??
r:
array[1..
size]
of
integer;
??
map
:
array[1..size,
1..size]
of
boolean;
??
found
:
boolean;
function
successful
:
boolean;
var
??
i
:
integer;
begin
??
for
i
:=1
to
n
do
?????
if
not
map[r[i]][r[i
mod
n
+
1]]
?????
then
begin
???????
successful
:=
false;
???????
exit;
?????
end;
??
successful
:=true;
end;
procedure
swap(var
a,
b
:
integer);
var
???
t
:
integer;
begin
???
t
:=
a;
???
a
:=
b;
???
b
:=
t;
end;
procedure
perm(left,
right
:
integer);
var
???
i
:
integer;
begin
???
if
found
??????
then
exit;
???
if
left
>
right
???
then
begin
???????
if
successful
???????
then
begin
??????????
for
i
:=
1
to
n
do
????????????
writeln(r[i],
'
');
??????????
found
:=
true;
???????
end;
???????
exit;
???
end;
???
for
i:=
left
to
right
do
???
begin
?????
swap(r[left],
r[i]);
?????
perm(left
+
1,
right);
?????
swap(r[left],
r[i]);
???
end;
end;
begin
???
readln(n,
m);
???
fillchar(map,
sizeof(map),
false);
???
for
i
:=
1
to
m
do
???
begin
?????
readln(x,
y);
?????
map[x][y]
:=
true;
?????
map[y][x]
:=
true;
???
end;
???
for
i
:=
1
to
n
do
?????
r[i]
:=
i;
???
found
:=
false;
???
perm(1,
n);
???
if
not
found
??????
then??
writeln('No
soloution');
end.
输入:
9
12
1
2
2
3
3
4
4
5
5
6
6
1
1
7
2
7
3
8
4
8
5
9
6
9
输出:__________
五、完善程序
1.(过河问题)
在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥走到河的左岸.在伸手不见五指的黑夜里,过桥时必须借照灯光来照明,不幸的是,他们只有一盏灯.另外,独木桥上最多能承受两个人同时经过,否则将会坍塌.每个人单独过独木桥都需要一定的时间,不同的人要的时间可能不同.两个人一起过独木桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥所花费的时间.现在输入N(2<=N<1000)和这N个人单独过桥需要的时间,请计算总共最少需要多少时间,他们才能全部到达河左岸.
?????
例如,有3个人甲、乙、丙,他们单独过桥的时间分别为1??
2??
4,则总共最少需要的时间为7.具体方法是:甲??
乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然后甲,丙在一起过桥到河的左岸,总时间为2+1+4=7.
const
SIZE
=
100;
????
INFINITY
=
10000;
????
LEFT
=
true;
????
RIGHT
=
false;
????
LEFT_TO_RIGHT
=
true;
????
RIGHT_TO_LEFT
=
false;
Var
??
n,
i
:
integer;
????
time
:
array[1..Size]
of
integer;
????
pos
:array[1..Size]
of
Boolean;
function
max(a,
b
:integer)
:
integer;
begin
if
a
>
b
then
??????
max
:=
a
????
else
??????
max
:=
b;
end;
function
go(stage
:
boolean)
:
integer;
var
????
i,
j,
num,
tmp,
ans
:
integer;
begin
????
if??
(stage
=
RIGHT_TO_LEFT)
????
then
begin
???????
num
:=
0;
???????
ans
:=0;
???????
for
i
:=
1
to
n
do
??????????
if
pos[i]
=
Rignt
then
??????????
begin
?????????????
inc(num);
?????????????
if
time[i]
>
ans
then
???????????????
ans
:=
time[i];
end;
if
__________
then
begin
??
go
:=
ans;
??
exit;
end;
ans
:=
INFINITY;
for
i
:=
1
to
n
–
1
do
???
if
pos[i]
=
RIGHT
then
?????
for
j
:=
i+1
to
n
do
????????
if
pos[j]
=
RIGHT
then
????????
begin
???????????
pos[i]
:=
LEFT;
???????????
pos[j]
:=
LEFT;
???????????
tmp
:=
max(time[i],
time[j])
+
_______;
???????????
if
tmp
<
ans
then
?????????????
ans
:=
tmp;
???????????
pos[i]
:=
RIGHT;
???????????
pos[j]
:=
RIGHT;
????????
end;
go
:=
ans;
end
else
if??
(stage
=
LEFT_TO_RIGHT)
then
begin
??
ans
:=
INFINITY;
????
for
i
:=
1
to
n
do
?????
if
_______
then
???????
begin
??????????
pos[i]
:=
RIGHT;
??????????
tmp
:=
________;
??????????
if
tmp
<
ans
then
????????????
ans
:=
tmp;
??????????
_________;
????????
end;
go
:=
ans;
??
end
??
else
go
:=
0;
end;
begin
???
readln(n);
???
for
i
:=
1
to
n
do
???
begin
????
read(time[i]);
??????
pos[i]
:=
RIGHT;
???
end;
writeln(go(RIGHT_TO_LEFT));
end.
NOIP2010提高组(Pascal语言)参考答案与评分标准
一、单项选择题(共10题,每题1.5分,共计15分)
1
2
3
4
5
6
7
8
9
10
C
A
A
D
B
D
C
B
C
B
二、不定项选择题(共10题,每题1.5分,共计15分,多选或少选均不得分)
1
2
3
4
5
6
7
8
9
10
ACD
AD
ABD
AC
B
B
D
D
BCD
ABC
三、问题求解(共3题,每题5分,共计15分)
1.yyxy
xx
yyxy
xyx
xx
xyx
2.12
3.18
四、阅读程序写结果(共4题,每题7分,共计28分)
1.16
2.1
2
3
5
6
7
9
10
14
3.4
4.1
6
9
5
4
8
3
2
7
五、完善程序(第1空2分,其余10空,每空2.5分,共计27分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1.①
num
<=
2(或num
<
3
或num
=
2)
②
go(LEFT_TO_RIGHT)
③
pos[i]
=
LEFT(或LEFT
=
pos[i])
④
time[i]
+
go(RIGHT_TO_LEFT)(或go(RIGHT_TO_LEFT)
+
time[i])
⑤
pos[i]
:=
LEFT
本小题中,LEFT可用true代替,LEFT_TO_RIGHT可用true代替,RIGHT_TO_LEFT可用false代替。
2.①
opt[k]
②
home[r]
:=
k
③
j
:=
i
+
i(或j
:=
2
i
或j
:=
i
2)
④
swap(i,
j)(或swap(j,
i))
⑤
value[i]
+
heap[1](或heap[1]
+
value[i])
⑥
i
-
m首届“同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛(高中组)试题参考答案
一、基础题(33分)
(1)本题4分
显示结果不同,③
和
④
比
①
多出一个文件目录;
(2)本题9分
列出的一个相应问题是:(能列出类似的问题均可)
用五角钱换成5分、2分与1分的硬币,有多少种换法
(3)本题8分
这四对球匹配的情况为:
A
B
C
D
4
3
1
2
(4)本题12分
从存储数据中求出从入口到出口经过最少关卡路径的算法及输出结果:
算法:
输出结果:
I:=1;
(17)
WHILE
NO[I]≠17
DO
↑
I:=I+1;
(16)
ENDWHILE;
↑
REPEAT
(19)
WRITE
(‘(’,NO[I],‘)’);
↑
WRITE
(‘↑’);
(18)
I:=PRE[I];
↑
UNTIL
I=0;
二、根据题目要求,补充完善以下伪代码程序(共67分)
(1)共10分(每空2分)
①
C[J1]=0
AND
J1<3
N
②
C[J2]=0
AND
J2>J1
③
S:=0;
④
C[J]:=0;
⑤
C[I+J-1]:=C[I+J-1]+B[J];
(2)共25分(每空5分)
①
(Q.REAR+1)
MOD
(MAX+1);
②
(Q.FRONT+1)
MOD
(MAX+1);
③
(
CH
>=‘A’)
AND
(
CH
<=‘Z’)
④
MAXNUMBER:=MAX;
⑤
(
CH
>=‘A’)
AND
(
CH
<=‘Z’)
(3)共32分(每空4分)
①
F:=1;
②
I:=2;
③
(X[I]=’’)
AND
(I<10)
④
X[I]<>’%’
⑤
A[K]:=ORD(X[I])-48;
⑥
J:=J+1
⑦
J:=J-1;
⑧
K:=K-1;第六届全国青少年信息学(计算机)奥林匹克分区联赛初赛(高中组)
答
案
一、选择一个正确答案代码(A/B/C/D),填入每题的括号内
(每题1.5分,多选无分,共30分)
题号
1
2
3
4
5
6
7
8
9
10
选择
C
B
D
C
D
B
D
B
A
C
题号
11
12
13
14
15
16
17
18
19
20
选择
D
B
A
C
B
A
D
D
B
B
二.问题求解(每题6分,共12分)
1.
答:有5种不同形态的二叉树可以得到这一遍历结果;可画出的这些二叉树为:
①
②
③
④
⑤
2.
递推公式(用F(N)记录不同案数):
F(1)=1
F(2)=2
F(3)=4
F(N)
=
F(N-3)
+
F(N-2)
+
F(N-1)
(N≥4)
三.阅读程序,并写出程序的正确运行结果:
(每题10分,共20分)
1.本题的运行结果是:
4 3 0 2
2.本题的运行结果是:
BBAC
四.完善程序(共38分)
1.
①
A[
J
]:=1;
②
A[
I
]:=0;
③
S:=0;
④
B[
S
]:=1;
⑤
S
=
32
2.
①
SP1<=SP2
②
Q[
SP1
,
0
]
+
1
③
Q[
SP1
,
J
]
<>
0
④
(
Q[
SP2
,
0
]);
⑤
D[
Q[
I
,
0
]
]
+
1;
c
a
b
c
a
b
a
c
b
b
a
c
a
b
c2000
全国分区联赛
高中组(初赛)
第六届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题
(提高组PASCAL语言 二小时完成)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一.
选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题1.5分,多选无分,共30分)
1.
下列无符号数中,最小的数是( )
A.
(11011001)2
B.
(75)10
C.
(37)8
D.
(2A)16
2.
在外部设备中,绘图仪属于( )
A.
输入设备
B.
输出设备
C.
辅(外)存储器
D.
主(内)存储器
3.
计算机主机是由CPU与( )构成的
A.
控制器
B.
输入、输出设备
C.
运算器
D.
内存储器
4.
计算机病毒的特点是( )
A.
传播性、潜伏性、易读性与隐蔽性 B.
破坏性、传播性、潜伏性与安全性
C.
传播性、潜伏性、破坏性与隐蔽性 D.
传播性、潜伏性、破坏性与易读性
5.
WINDOWS
9X是一种( )操作系统
A.
单任务字符方式 B.
单任务图形方式 C.
多任务字符方式 D.
多任务图形方式
6.
Internet的规范译名应为( )
A.
英特尔网
B.
因特网
C.
万维网
D.
以太网
7.
计算机网络是一个( )系统
A.
管理信息系统
B.
管理数据系统
C.
编译系统
D.
在协议控制下的多机互连系统
8.
计算机系统总线上传送的信号有( )
A.
地址信号与控制信号
B.
数据信号、控制信号与地址信号
C.
控制信号与数据信号
D.
数据信号与地址信号
9.
计算机的运算速度取决于给定的时间内,它的处理器所能处理的数据量。处理器一次能处理的数据量叫字长。
已知64位的奔腾处理器一次能处理64个信息位,相当于( )字节。
A.
8个
B.
1个
C.
16个
D.
2个
10.
某种计算机的内存容量是640K,这里的640K容量是指( )个字节
A.
640
B.
640
1000
C.
640
1024
D.
640
1024
1024
11.
下面哪些计算机网络不是按覆盖地域划分的( )
A.
局域网
B.
都市网
C.
广域网
D.
星型网
12.
在有N个叶子节点的哈夫曼树中,其节点总数为( )
A.
不确定
B.
2N-1
C.
2N+1
D.
2N
13.
已知数组中A中,每个元素A[
I,J
]在存贮时要占3个字节,设I从1变化到8,J从1变化到10,分配内存时是从地址SA开始连续按行存贮分配的。
试问:A[
5,8
]的起始地址为( )
A.
SA+141
B.
SA+180
C.
SA+222
D.
SA+225
14.
不同类型的存储器组成了多层次结构的存储器体系,按存取速度从快到慢的排列是( )
A.快存/辅存/主存
B.外存/主存/辅存
C.快存/主存/辅存
D.主存/辅存/外存
15.
某数列有1000个各不相同的单元,由低至高按序排列;现要对该数列进行二分法检索(binary-search),在最坏的情况下,需检视( )个单元。
A.
1000
B.
10
C.
100
D.
500
16.
请仔细阅读下列程序段:
Var
a:array[1..3,1..4]of
integer;
b:array[1..4,1..3]of
integer;
x,y
:integer;
begin
for
x:=1
to
3
do
for
y:=1
to
4
do
a[x,y]:=x-y;
for
x:=4
downto
1
do
for
y:=1
to
3
do
b[x,y]:=a[y,x];
writeln(b[3,2]);
end.
上列程序段的正确输出是( )
A.-1
B.
-2
C.
-3
D.
–4
17.
线性表若采用链表存储结构,要求内存中可用存储单元地址( )
A.
必须连续
B.
部分地址必须连续 C.
一定不连续 D.
连续不连续均可
18.
下列叙述中,正确的是( )
A.
线性表的线性存储结构优于链表存储结构
B.
队列的操作方式是先进后出
C.
栈的操作方式是先进先出
D.
二维数组是指它的每个数据元素为一个线性表的线性表
19.
电线上停着两种鸟(A,B),可以看出两只相邻的鸟就将电线分为了一个线段。这些线段可分为两类;一类是两端的小鸟相同;另一类则是两端的小鸟不相同。
已知:电线两个顶点上正好停着相同的小鸟,试问两端为不同小鸟的线段数目一定是( )。
A.
奇数
B.
偶数
C.
可奇可偶
D.
数目固定
20.
一个文本屏幕有25列及80行,屏幕的左上角以(1,1)表示,而右下角则以(80,25)表示,屏幕上每一个字符占用两字节(byte),整个屏幕则以线性方式存储在电脑的存储器内,由内屏幕左上角开始,位移为0,然后逐列存储。求位于屏幕(X,Y)的第一个字节的位移是( )
A.
(Y
80+X)
2-1
B.
((Y-1)
80+X-1)
2
C.
(Y
80+X-1)
2
D.
((Y-1)
80+X)
2-1
二.问题求解(每题6分,共12分)
1.
已知,按中序遍历二叉树的结果为:abc
问:有多少种不同形态的二叉树可以得到这一遍历结果,并画出这些二叉树。
2.
设有一个共有n级的楼梯,某人每步可走1级,也可走2级,也可走3级,用递推公式给出某人从底层开始走完全部楼梯的走法。
例如:当n=3时,共有4种走法,即1+1+1,1+2,2+1,3。
三.阅读程序,并写出正确的运行结果(每题10分,共20分)
1.
PROGRAM
NOI_003;
CONST
N=7;
M=6;
VAR
I,J,X0,Y0,X1,Y1,X2,Y2
:
INTEGER;
D
:
REAL;
P
:
BOOLEAN;
G
:
ARRAY[0..N,0..M]
OF
0..1;
FUNCTION
DISP(X1,Y1,X2,Y2:INTEGER):REAL;
BEGIN
DISP:=SQRT((X1-X2)
(X1-X2)+(Y1-Y2)
(Y1-Y2));
END;
BEGIN
FOR
I:=0
T0
N
DO
FOR
J:=0
TO
M
DO
G[I,J]:=0
READLN(X1,Y1,X2,Y2);
G[X1,Y1]:=1;
G[X2,Y2]:=1;
P:=TRUE;
WHILE
P
DO
BEGIN
P:=FALSE;
D:=DISP(X1,Y1,X2,Y2);
X0:=X1;
Y0:=Y1;
FOR
I:=4
TO
N
DO
FOR
J:=0
TO
M
DO
IF
(D>DISP(I,J,X2,Y2))
AND
(G[I,J]=0)
THEN
BEGIN
D:=DISP(I,J,X2,Y2);
X0:=I;
Y0:=J;
END;
IF
(X0<>X1)
OR
(Y0<>Y1)
THEN
BEGIN
X1:=X0;
Y1:=Y0;
P:=TRUE;
G[X1,Y1]:=1;
END;
D:=DISP(X1,Y1,X2,Y2);
X0:=X2;
Y0:=Y2;
FOR
I:=0
TO
3
DO
FOR
J:=0
TO
M
DO
IF
(DAND(G[I,J]=0)
THEN
BEGIN
D:=DISP(X1,Y1,I,J);
X0:=I;
Y0:=J
END;
IF
(X0<>X2)
OR
(Y0<>Y2)
THEN
BEGIN
X2:=X0;
Y2=Y0;
P:=TRUE;
G[X2,Y2]:=1;
END;
END;
WRITELN(X1,Y1,X2,Y2)
END.
输入:7
6
0
0
输出:
2.
PROGRAM
NOI_002;
VAR
I,J,L,N,K,S,T
:
INTEGER;
B
:
ARRAY[1..10]
OF
0..9;
BEGIN
READLN(L,N);
S:=L;
K:=1;
T:=L;
IF
N>L
THEN
BEGIN
WHILE
SDO
BEGIN
K:=K+1;
T:=T
L;
S:=S+T
END;
S:=S-T;
N:=N-S-1;
FOR
I:=1
TO
10
DO
B[I]:=0;
J:=11;
WHILE
N>0
DO
BEGIN
J:=J-1;
B[J]:=N
MOD
L;
N:=N
DIV
L
END;
FOR
I:=10-K+1
TO
10
DO
WRITE(CHR(ORD(‘A’)+B[I]));
READLN;
END
ELSE
WRITELN(CHR(ORD(‘A’)
+
N-1))
END
输入:
4
167
输出:
四.完善程序(共38分)
1.【问题描述】
将2n个0和2n个1,排成一个圈。从任一个位置开始,每次按逆时针的方向以长度为n+1的单位进行数二进制数。要求给出一种排法,用上面的方法产生出来的2n+1个二进制数都不相同。
例如,当n=2时,即22个0和22个1排成如下一圈:
比如,从A位置开始,逆时针方向取三个数000,然后再从B位置上开始取三个数001,接着从C开始取三个数010,……
可以得到000,001,010,101,011,111,110,100共8个二进制数且都不相同。
【程序说明】
以N=4为例,即有16个0,16个1,数组A用以记录32个0、1的排法,数组B统计二进制数是否已出现过。
【程序清单】
PROGRAM
NOI00;
VAR
A
:ARRAY[1..36]
OF
0..1;
B
:ARRAY[0..31]
OF
INTEGER;
I,J,K,S,P:INTEGER;
BEGIN
FOR
I:=1
TO
36
DO
A[I]:=0;
FOR
I:=28
TO
32
DO
A[I]:=1;
P:=1;
A[6]:=1;
WHILE
(P=1)
DO
BEGIN
J:=27;
WHILE
A[J]=1
DO
J:=J-1;
(
①
)
FOR
I:=J+1
TO
27
DO(
②
)
FOR
I:=0
TO
31
DO
B[I]:=O;
FOR
I:=1
TO
32
DO
BEGIN
(
③
)
FOR
K:=I
TO
I+4
DO
S:=S
2+A[K];
(
④
)
END;
S:=0;
FOR
I:=0
TO
31
DO
S:=S+B[I];
IF(
⑤
)THEN
P:=0
END;
FOR
I:=1
TO
32
DO
FOR
J:=I
TO
I+4
DO
WRITE(A[J]);
WRITELN
END.
2.【问题描述】
求出一棵树的深度和宽度。例如有如右的一棵树:
其树的深度为从根结点开始到叶结点结束的最大深度,树的宽度为同一层上结点数的最大值。在右图中树的深度为4,宽度为3。
用邻接表来表示树,右图中的树的邻接表示如下:
【程序清单】
PROGRAM
NOI00_6;
VAR
I,J,SP1,SP2,L,MAX
:
INTEGER;
TREE
:
ARRAY[1..20,1..6]
OF
INTEGER;
Q
:
ARRAY[1..100,0..6]
OF
INTEGER;
D
:
ARRAY[0..20]
OF
INTEGER;
BEGIN
FOR
I:=1
TO
14
DO
FOR
J:=1
TO
6
DO
TREE[I,J]:=O;
FOR
J:=1
TO
14
DO
TREE[J,1]:=J;
TREE[1,2]:=2;
TREE
[1,3]:=3;
TREE[1,4]:=4;
TREE[2,2]:=5;
TREE[2,3]:=6;
TREE
[3,2]:=7;
TREE[3,3]:=8;
TREE[4,2]:=9;
TREE[4,3]:=10;
TREE[4,4]:=11;
TREE[7,2]:=12;
TREE[7,3]:=13;
TREE[13,2]:=14;
SP1:=1;
SP2:=1;
FOR
I:=1
TO
6
DO
Q[1,I]:=TREE[1,I];
Q[1,0]:=1;
WHILE(
①
)
DO
BEGIN
L:=(
②
);
J:=2;
WHILE(
③
)DO
BEGIN
SP2:=SP2+1;
Q[SP2,0]:=L;
Q[SP2,1]:=Q[SP1,J];
FOR
I:=2
TO
6
DO
Q[SP2,I]:=TREE[Q[SP1,J],I];
J:=J+1
END;
SP1:=SP1+1
END;
WRITELN(
④
)
FOR
I:=0
TO
20
DO
D[I]:=0;
FOR
I:=1
TO
SP2
DO
D[Q[I,0]]:=(
⑤
)
MAX:=D[1];
FOR
I:=2
TO
20
DO
IF
D[I]>MAX
THEN
MAX:=D[I];
WRITELN(MAX);
READLN;
END.
1
2
3
4
0
0
2
0
0
0
0
0
3
5
0
0
0
0
4
6
0
0
0
0
5
0
0
0
0
0
6
7
0
0
0
0
7
0
0
0
0
0
·2·第七届全国青少年信息学(计算机)奥林匹克分区联赛初赛(高中组)
答
案
一、选择一个正确答案代码(A/B/C/D),填入每题的括号内
(每题1.5分,多选无分,共30分)
题号
1
2
3
4
5
6
7
8
9
10
选择
A
D
B
D
D
D
A
A
A
A
题号
11
12
13
14
15
16
17
18
19
20
选择
A
B
C
B
B
B
B
C
B
D
二.问题求解(5+7分,共12分)
1.
该二叉树先序遍历的顺序为:ABCEGDFHIJ
2.
用这些点为顶点,能组成2250个不同四边形
三.阅读程序,并写出程序的正确运行结果:
(4+7+8+9分,共28分)
(1)程序的运行结果是:125?
(2)程序的运行结果是:181
110
87
76
66
62
61
60
(3)程序的运行结果是:1348
(4)程序的运行结果是:153
四.完善程序(每小题3分,共30分)
1.
①
SP
:=
SP
+
1
②
I
:=
I
-1
③
DK[
I
,
2
]
+
L
+
DK[
I+1,
2
]
④
D
⑤
DK[
I+1
,
1
]
2.
①
READLN
(
X,
Y,
W
)
②
R[
J
,
I
]
+
EET[
J
]
>
MAX
③
ET[N]
:=
EET[N];
④
ET[
J
]
-
R[
I
,
J
]
<
MIN
⑤
EET[
I
]
=
ET[
I
]第十九届全国青少年信息学奥林匹克联赛初赛
提高组Pascal语言试题
竞赛时间:2013年10月13日14:30~16:30
选手注意:
?
试题纸共12页,答题纸共2页,满分100分。请在答题纸上作答,写在试题纸上的一律无效。
?
不得使用任何电子试备(如计算器、手机、电子词典等)或查阅任何书籍资料。
1、单项选择题(共15题,每题1.5分,共计22.5分;每题有且仅有一个正确选项)
1.一个32位整型变量占用(
)个字节。
A.4
B.8
C.32
D.128
2.二进制数11.01在十进制下是(
)。
A.3.25
B.4.125
C.6.25
D.11.125
3.下面的故事与(
)算法有着异曲同工之妙。
从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事…………………………’”
A.枚举
B.递归
C.贪心
D.分治
4.1948年,(
)将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
A.冯·诺伊曼(John
von
Neumann)
B.图灵(Alan
Turing)
C.欧拉(Leonhard
Euler)
D.克劳德·香农(Claude
Shannon)
5.已知一棵二叉树有2013个节点,则其中至多有(
)个节点有2个子节点。
A.1006
B.1007
C.1023
D.1024
6.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通图。右图是一个有5个顶点、8条边的连通图。若要使它不再是连通图,至少要删去其中的(
)条边。
A.2
B.3
C.4
D.5
7.斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn-1+Fn-2(n≥3)。如果用下面的函数计算斐波那契数列的第n项,则其时间复杂度为(
)。
function
F(n:longint):longint;
begin
if
n<=2
then
F:=1
else
F:=F(n-1)+F(n-2);
end;
A.O(1)
B.O(n)
C.O(n2)
D.O(Fn)
8.二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点的值。那么,二叉查找树的(
)是一个有序序列。
A.先序遍历
B.中序遍历
C.后序遍历
D.宽度优先遍历
9.将(2,6,10,17)分别存储到某个地址区间为0~10的哈希表中,如果哈希函数h(x)=(
),将不会产生冲突,其中a
mod
b表示a除以b的余数。
A.x
mod
11
B.x2
mod
11
C.2x
mod
11
D.mod
11,其中表示下取整
10.IPv4协议使用32位地址,随着其不断被分配,地址资源日趋枯竭。因此,它正逐渐被使用(
)位地址的IPv6协议所取代。
A.40
B.48
C.64
D.128
11.二分图是指能将顶点划分成两个部分,每一部分内的顶点间没有边相连的简单无向图。那么12个顶点的二分图至多有(
)条边。
A.18
B.24
C.36
D.66
12.(
)是一种通用的字符编码,它为世界上绝大部分语言设定了统一并且唯一的二进制编码,以满足跨语言、跨平台的文本交换。目前它已经收录了超过十万个不同字符。
A.ASCII
B.Unicode
C.GBK2312
D.BIG5
13.把64位非零浮点数强制转换成32位浮点数后,不可能(
)。
A.大于原数
B.小于原数
C.等于原数
D.与原数符号相反
14.对一个n个顶点、m条边的带权有向简单图用Dijkstr算法计算单源最短路时,如果不使用堆或其它优先队列进行优化,则其时间复杂度为(
)。
A.O(mn+n3)
B.O(n2)
C.O((m+n)log
n)
D.O((m+n2)log
n)
15.T(n)表示某个算法输入规模为n时的运算次数。如果T(1)为常数,且有递归式T(n)=2
T(n
/
2)+2n,那么T(n)
=
(
)。
A.Θ(n)
B.Θ(n
log
n)
C.Θ(n2)
D.Θ(n2log
n)
2、不定项选择题(共5题,每题1.5分,共计7.5分;每题有一个或多个正确选项,多选或少选均不得分)
1.下列程序中,正确计算1,2,…,100这100个自然数之和sum(初始值为0)的是(
)。
A.
for
i:=1
to
100
do
sum:=sum+I;
B.
i:=1;while
i>100
dobegin
sum:=sum+I;
inc(i);end;
C.
i:=1;repeat
sum:=sum+I;
inc(i);until
i>100;
D.
i:=1;repeat
sum:=sum+I;
inc(i);until
i<=100;
2.(
)的平均时间复杂度为O(n
log
n),其中n是待排序的元素个数。
A.快速排序
B.插入排序
C.冒泡排序
D.归并排序
3.以A0作为起点,对下面的无向图进行深度优先遍历时(遍历的顺序与顶点字母的下标无关),最后一个遍历到的顶点可能是(
)。
A.A1
B.A2
C.A3
D.A4
4.(
)属于NP类问题。
A.存在一个P类问题
B.任何一个P类问题
C.任何一个不属于P类的问题
D.任何一个在(输入规模的)指数时间内能够解决的问题
5.CCF
NOIP复赛考试结束后,因(
)提出的申诉将不会被受理。
A.源程序文件名大小写错误
B.源程序保存在指定文件夹以外的位置
C.输出文件的文件名错误
D.只提交了可执行文件,未提交源程序
3、问题求解(共2题,每题5分,共计10分;每题全部答对得5分,没有部分分)
1.
某系统自称使用了一种防窃听的方式验证用户密码。密码是n个数s1,s2,…,sn,均为0或1。该系统每次随机生成n个数a1,a2,…,an,均为0或1,请用户回答(s1a1+s2a2+…+snan)除以2的余数。如果多次的回答总是正确,即认为掌握密码。该系统认为,即使问答的过程被泄露,也无助于破解密码——因为用户并没有直接发送密码。
然而,事与愿违。例如,当n=4时,有人窃听了以下5次问答:
问答编号
系统生成的n个数
掌握密码的用户的回答
a1
a2
a3
a4
1
1
1
0
0
1
2
0
0
1
1
0
3
0
1
1
0
0
4
1
1
1
0
0
5
1
0
0
0
0
就破解出了密码s1=
,s2=
,s3=
,s4=
。
2.
现有一只青蛙,初始时在n号荷叶上。当它某一时刻在k号荷叶上时,下一时刻将等概率地随机跳到1,2,…,k号荷尔蒙叶之一上,直至跳到1号荷叶为止。当n=2时,平均一共跳2次;当n=3时,平均一共跳2.5次。则当n=5时,平均一共跳次。
4、阅读程序写结果(共4题,每题8分,共计32分)
1.var
n,i:integer;
str:string;
isPlalindrome:Boolean;
begin
readln(str);
n:=Length(str);
isPlalindrome:=true;
for
i:=1
to
(n
idv
2)
do
begin
if
(str[i]<>str[n-i+1])
then
isPlalindrome:=false;
end;
if
(isPlalindrome)
then
writeln(‘Yes’)
else
writeln(‘No’);
end.
输入:adceecba
输出:
2.var
a,b,u,v,I,num:integer;
begin
readln(a,b,u,v);
num:=0;
for
i:=a
to
b
do
begin
if
(I
mod
u=0)or(I
mod
v=0)
then
inc(num);
end;
writeln(num);
end.
输入:1
1000
10
15
输出:
3.const
SIZE=100;
var
n,ans,I,j:integer;
height,num:array[1..SIZE]
of
integer;
begin
read(n);
for
i:=1
to
n
do
begin
read(height[i]);
num[i]:=1;
for
j:=1
to
i-1
do
begin
if
((height[j]and
(num[j]>=num[i]))
then
num[i]:=num[j]+1;
end;
end;
ans:=0;
for
i:=1
to
n
do
begin
if
(num[i]>ans)
then
ans:=ans+num[i];
end;
writeln(ans);
end.
输入:
8
3
2
5
11
12
7
4
10
输出:
4.const
SIZE=100;
var
n,m,p,count,ans,x,y,I,j:integer;
a:array[1..SIZE,1..SIZE]
of
integer;
procedure
colour(x,y:integer);
begin
inc(count);
a[x][y]:=1;
if
(x>1)and(a[x-1][y]=0)
then
colour(x-1,y);
if
(y>1)and(a[x][y-1]=0)
then
colour(x,y-1);
if
(xthen
colour(x+1,y);
if
(ythen
colour(x,y+1);
end;
begin
fillchar(a,sizeof(a),0);
readln(n,m,p);
for
i:=1
to
p
do
begin
read(x,y);
a[x][y]:=1;
end;
ans:=0;
for
i:=1
to
n
do
for
j:=1
to
m
do
if
a[i][j]=0
then
begin
count:=0;
colour(i,j);
if
(ansthen
ans:=count;
end;
writeln(ans);
end.
输入:
6
5
9
1
4
2
3
2
4
3
2
4
1
4
3
4
5
5
4
6
4
输出:
5、完善程序(第1题15分,第2题13分,共计28分)
1.(序列重排)全局数组变量a定义如下:
const
int
SIZE=100;
int
a[SIZE],n;
它记录着一个长度为n的序列a[1],a[2],…,a[n]。
现在需要一个函数,以整数p(1≤p≤n)为参数,实现如下功能:将序列a的前p个数与后n-p个数对调,且不改变这p个数(或n-p个数)之间的相对位置。例如,长度为5的序列1,2,3,4,5,当p=2时重排结果为3,4,5,1,2。
有一种朴素的算法可以实现这一需求,其时间复杂度为O(n)、空间复杂度为O(n):
procedure
swap1(p:longint);
var
I,j:longint;
b:array[1..SIZE]
of
longint;
begin
for
i:=1
to
p
do
b[
(1)
]:=a[i];
//(2分)
for
i:=p+1
to
n
do
b[i-p]:=a[i];
for
i:=1
to
n
do
a[i]:=b[i];
end;
我们也可以用时间换空间,使用时间复杂度为O(n2)、空间复杂度为O(1)的算法:
procedure
swap2(p:longint);
var
I,j,temp:longint;
begin
for
i:=p+1
to
n
do
begin
temp:=a[i];
for
j:=I
downto
(2)
do
//(2分)
a[j]:=a[j-1];
(3)
:=temp;
//(2分)
end;
end;
事实上,还有一种更好的算法,时间复杂度为O(n)、空间复杂度为O(1);
procedure
swap3(p:longint);
var
start1,end1,start2,end2,I,j,temp:longint;
begin
start1:=1;
end1:=p;
start2:=p+1;
end2:=n;
while
true
do
begin
i:=star1;
j:=start2;
while
(i<=end1)and(j<=end2)
do
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp
inc(i);
inc(j);
end;
if
i<=end1
then
start1:=i
else
if
(4)
then
//(3分)
begin
start1:=
(5)
;
//(3分)
end1:=
(6)
;
//(3分)
start2:=j;
end
else
break;
end;
end;
2.(两元序列)试求一个整数序列中,最长的仅包含两个不同整数的连续子序列。如有多个子序列并列最长,输出任意一个即可。例如,序列“1
1
2
3
2
3
2
3
3
1
1
1
3
1”中,有两段满足条件的最长子序列,长度均为7,分别用下划线和上划线标出。
program
two;
const
SIZE=100;
var
n,I,j,cur1,cur2,count1,count2,
ans_length,ans_start,ans_end:longint;
//cur1,cur2分别表示当前子序列中的两个不同整数
//count1,count2分别表示cur1,cur2在当前子序列中出现的次数
a:array[1..SIZE]
of
longint;
begin
readln(n);
for
i:=1
to
n
do
read(a[i]);
i:=1;
j:=1;
//i,j分别表示当前子序列的首尾,并保证其中至多有两个不同整数
while
(j<=n)and(a[j]=a[i])
do
inc(j);
cur1:=a[i];
cur2:=a[j];
count1:=
(1)
;
//(3分)
count2:=1;
ans_length:=j-i+1;
while
jdo
begin
inc(j);
if
a[j]=cur1
then
inc(count1)
else
if
a[j]=cur2
then
inc(count2)
else
begin
if
a[j-1]=
(2)
then
//(3分)
while
count2>0
do
begin
while
count2>0
do
begin
if
a[i]=cur1
then
dec(count1)
else
dec(count2);
inc(i);
end;
cur2:=a[j];
count2:=1;
end
else
begin
while
count1>0
do
begin
if
a[i]=cur1
then
(3)
//(2分)
else
(4)
;
//(2分)
inc(i);
end;
(5)
;
//(3分)
count1:=1;
end;
end;
if
(ans_lengththen
begin
ans_length:=j-i+1;
ans_start:=I;
ans_end:=j;
end;
end;
for
i:=ans_start
to
ans_end
do
write(a[i],’
‘);
end.
CCF
NOIP2013初赛提高组Pascal语言试题
第2页,共
2页第十届全国青少年信息学奥林匹克联赛初赛试题
提高组参考答案
一.
单项选择题
(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案.)。
题号
1
2
3
4
5
6
7
8
9
10
选择
A
D
E
C
B
B
C
D
C
A
二.不定项选择题
(共10题,每题1.5分,共计15分。多选或少选均不得分)。
题号
11
12
13
14
15
16
17
18
19
20
选择
BC
ACDE
BCD
D
AC
BE
ADE
ACD
ABDE
BCE
三.问题求解(共2题,每题5分,共计10分)
1.
答:
10
2.
答:
a
b
d
f
g
e
c
四.
阅读程序(共4题,每题8分,共计32分)
(1)程序的运行结果是:
263
(2)程序的运行结果是:
328
(3)程序的运行结果是:
1
4
2
1
3
3
(4)程序的运行结果是:
-400
五.
完善程序
(前5空,每空2分,后6空,每空3分,共28分)
Pascal语言
=================
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]第十七届全国青少年信息学奥林匹克联赛初赛试题
(
提高组
Pascal语言
两小时完成
)
●●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效
●●
一、单项选择题(共20题,每题1.5分。共计30分。每题有且仅有一个正确选项。)
1.在二进制下,1100011
+(
)=
1110000。
A.1011
B.1101
C.1010
D.1111
2.字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的(
)。
A.66
B.5A
C.50
D.视具体的计算机而定
3.右图是一棵二叉树,它的先序遍历是(
)。
A.ABDEFC
B.DBEFAC
C.DFEBCA
D.ABCDEF
4.寄存器是(
)的重要组成部分。
A.硬盘
B.高速缓存
C.内存
D.中央处理器(CPU)
5.广度优先搜索时,需要用到的数据结构是(
)。
A.链表
B.队列
C.栈
D.散列表
6.在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指(
)。
A.程序运行时理论上所占的内存空间
B.程序运行时理论上所占的数组空间
C.程序运行时理论上所占的硬盘空间
D.程序源文件理论上所占的硬盘空间
7.应用快速排序的分治思想,可以实现一个求第K大数的程序。假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为(
)。
A.O(n2)B.O(n
log
n)C.O(n)
D.O(1)
8.为解决Web应用中的不兼容问题,保障信息的顺利流通,(
)制定了一系列标准,涉及HTML、XML、CSS等,并建议开发者遵循。
A.微软
B.美国计算机协会(ACM)
C.联台国教科文组织
D.万维网联盟(W3C)
9.体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站在他的后面。这种站队的方法类似于(
)算法。
A.快速排序
B.插入排序
C.冒泡排序
D.归并排序
10.1956年(
)授予肖克利(William
Shockley)、巴丁(John
Bardeen)和布拉顿(Walter
Brattain),以表彰他们对半导体的研究和晶体管效应的发现。
A.诺贝尔物理学奖
B.约翰?冯?诺依曼奖
C.图灵奖
D.高德纳奖(Donald
E.Knuth
Prize)
二、不定项选择题(共10题,每题1.5分,共计15分。每题有一个或多个正确选项。多选或少选均不得分。)
1.如果根结点的深度记为1,则一棵恰有2011个叶子结点的二叉树的深度可能是(
)。
A.10
B.11
C.12
D.2011
2.在布尔逻辑中,逻辑“或”的性质有(
)。
A.交换律:P
V
Q
=
Q
V
P
B.结台律:P
V
(
Q
V
R
)
=
(
P
V
Q
)
V
R
C.幂等律:P
V
P
=
P
D.有界律:P
V
1
=
1
(1表示逻辑真)
3.一个正整数在十六进制下有100位,则它在二进制下可能有(
)位。
A.399
B.400
C.401
D.404
4.汇编语言(
)。
A.是一种与具体硬件无关的程序设计语言
B.在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试
C.可以直接访问寄存器、内存单元、I/O端口
D.随着高级语言的诞生,如今已完全被淘汰,不再使用
5.现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。那么,“也”字的编码长度可能是(
)。
A.1
B.2
C.3
D.4
6.生物特征识别,是利用人体本身的生物特征进行身份认证的一种技术。目前,指纹识别、虹膜识别、人脸识别等技术己广泛应用于政府、银行、安全防卫等领域。以下属于生物特征识别技术及其应用的是(
)。
A.指静脉验证
B.步态验证
C.ATM机密码验证
D.声音验证
7.对于序列“7、5、1、9、3、6、8、4”,在不改变顺序的情况下,去掉(
)会使逆序对的个数减少3。
A.7
B.5
C.3
D.6
8.计算机中的数值信息分为整数和实数(浮点数)。实数之所以能表示很大或者很小的数,是由于使用了(
)。
A.阶码
B.补码
C.反码
D.较长的尾数
9.对右图使用Dijkstra算法计算S点到其余各点的最短路径
长度时,到B点的距离d[B]初始时赋为8,在算法的执行过程
中还会出现的值有(
)。
A.3
B.7
C.6
D.5
10.为计算机网络中进行数据交换而建立的规则、标准或约定的集合成为网络协议。下列英文缩写中,(
)是网络协议。
A.HTTP
B.TCP/IP
C.FTP
D.WWW
三、问题求解(共2题,每题5分,共计10分)
1.平面图是可以画在在平面上,且它的边仅在顶点上才能相交的简单
无向图。4个顶点的平面图至多有6条边,如右图所示。那么,5个顶
点的平面图至多有______条边。
2.定义一种字符串操作,一次可以将其中一个元素移到任意位置。举例说明,对于字符串”BcA”,可以将A移到B之前,变成字符串”ABC”。如果要将字符串”DACHEBGIF”变成”ABCDEFGHI”,最少需要________次操作。
四、阅读程序写结果(共4题,每题8分,共计32分)
1.
Const
SIZE
=
100;
var
n,
i,
sum,
x
:
integer;
a
:
array[1..SIZE]
of
integer;
begin
readln(n);
fillchar(a,
sizeof(a),
0);
for
i:=
1
to
n
do
begin
read(x);
inc(a[x]);
end;
i
:=
0;
sum
:=
0;
while
sum
<
(n
div
2
+
1)
do
begin
inc(i);
sum
:=sum
+
a[i];
end;
writeln(i);
end.
输入:
11
4
5
6
6
4
3
3
2
3
2
1
输出:
2.
var
n
:
integer;
procedure
f2(x,
y
:
integer);
forward;
procedure
f1(x,
y
:
integer);
begin
if
x
<
n
then
f2(y,
x
+
y);
end;
procedure
f2(x,
y
:
integer);
begin
write(x,
’
’);
f1(y,
x
+
y);
end;
begin
readln(n);
f1(0,
1);
end.
输入:30
输出:_____________
3.
const
V
=
100;
var
visited
:
array[1..v]
of
boolean;
e
:
array[1..V,
1..V]
of
integer;
n,
m,
ans,
i,
j,
a,
b,
c
:
integer;
procedure
dfs(x,
len
:
integer);
var
I
:
integer;
begin
visited[x]
:=
true;
if
len
>
ans
then
ans
:=
len;
for
i
:=
1
to
n
do
if
(not
visited[i])
and
(e[x,
i]
<>
-1)
then
dfs(i,
len
+
e[x,
i]);
visited[x]
:=
false;
end;
begin
readln(n,
m);
for
i
:=
1
to
n
do
for
j
:=
1
to
n
do
e[i][j]
:=
-1;
for
i
:=
1
to
m
do
begin
readln(a,
b,
c);
e[a][b]
:=
c;
e[b][a]
:=
c;
end;
for
i
:=
1
to
n
do
visited[i]
:=
false;
ans
:=
0;
for
i
:=
1
to
n
do
dfs(i,
0);
writeln(ans);
end.
输入:
4
6
1
2
10
2
3
20
3
4
30
4
1
40
1
3
50
2
4
60
输出:__________
4.
const
SIZE
=
10000;
LENGTH
=
10;
var
sum
:
longint;
n,
m,
i,
j
:
integer;
a
:
array[1..SIZE,
1..LENGTH]
of
integer;
function
h(u,
v
:
integer)
:
integer;
var
ans,
i
:
integer;
begin
ans
:=
0;
for
i
:=
1
to
n
do
if
a[u][i]
<>
a[v][i]
then
inc(ans);
h
:=
ans;
end;
begin
readln(n);
filichar(a,
sizeof(a),
0);
m
:=
1;
repeat
i
:=
1;
while
(i
<=
n)
and
(a[m][i]
=
1)
do
inc(i);
if
i
>
n
then
break;
inc(m);
a[m][i]
:=1;
for
j
:=
i
+
1
to
n
do
a[m][j]
:=
a[m
-
1][j];
until
false;
sum
:=0;
for
i
:=
1
to
m
do
for
j
:=
1
to
m
do
sum
:=
sum
+
h(i,
j);
writeln(sum);
end.
输入:7
输出:____________
五、完善程序(第1题,每空2分,第2题,每空3分,共计28分)
1.
(大整数开方)输入一个正整数n(1≤n<10100),试用二分法计算它的平方根的整数部分。
const
SIZE
=
200;
type
hugeint
=
record
len
:
integer;
num
:
array[1..SIZE]
of
integer;
end;
//len表示大整数的位数;num[1]表示个位、num[2]表示十位,以此类推
var
s
:
string;
i
:
integer;
target,
left,
middle,
right
:
hugeint;
function
times(a,
b
:
hugeint)
:
hugeint:
var
i,
j
:
integer;
ans
:
hugeint;
begin
filIchar(ans,
sizeof(ans),
0);
for
i
:=
1
to
a.1en
do
for
j
:=
1
to
b.1en
do
___①___
:=
ans.num[i
+
j
—
1]
+
a.num[i]
b.num[j];
for
i
:=
1
to
a.len
+
b.1en
do
begin
ans.num[i
+
1]
:=
ans.num[i
+
1]
+
ans.num[i]
div
10;
___②___;
if
ans.num[a.1en
+
b.1en]
>
0
then
ans.len
:=
a.1en
+
b.1en
else
ans.len
:=a.1en
+
b.1en
–
1;
end;
times
:=
ans;
end;
function
add(a,
b
:
hugeint)
:
hugeint;
var
i
:
integer;
ans
:
hugeint;
begin
fillchar(ans.num,
sizeof(ans.num),
0);
if
a.1en
>
b.1en
then
ans.len
:=
a.1en
else
ans.len
:=
b.len;
for
i
:=
1
to
ans.1en
do
begin
ans.num[i]
:=___③___;
ans.num[i
+
1]
:=
ans.num[i
+
1]
+
ans.num[i]
div
10;
ans.num[i]
:=
ans.num[i]
mod
10;
end;
if
ans.num[ans.1en
+
1]
>
0
then
inc(ans.len);
add:=ans;
end;
function
average(a,
b
:
hugeint)
:
hugeint;
var
i
:
integer;
ans
:
hugeint;
begin
ans
:=
add(a,
b);
for
i
:=
ans.1en
downto
2
do
begin
ans.num[i
-
1]
:=
ans.num[i
-
1]
+
(___④___)
10;
ans.num[i]
:=
ans.num[i]
div
2;
end;
ans.num[i]
:=
ans.num[i]
div
2;
if
ans.num[ans.len]
=
0
then
dec(ans.len);
average
:=
ans;
end;
function
plustwo(a
:
hugeint)
:
hugeint;
var
i
:
integer;
ans
:
hugeint;
begin
ans
:=
a;
ans.num[1]
:=
ans.num[1]
+
2;
i
:=
1;
while(i
<=
ans.len)
and
(ans.num[i]
>=
10)
do
begin
ans.num[i
+
1]
:=
ans.num[i
+
1]
+
ans.num[i]
div
10;
ans.num[i]
:=
ans.num[i]
mod
10;
inc(i);
end;
if
ans.num[ans.len
+
1]
>
0
then___⑤___;
plustwo
:=
ans;
end;
function
over(a,
b
:
hugeint)
:
boolean;
var
i
:
integer;
begin
if(___⑥___)then
begin
over
:=
false;
exit;
end;
if
a.1en
>
b.1en
then
begin
over
:=
true;
exit;
end;
for
i
:=
a.len
downto
1
do
begin
if
a.num[i]
<
b.num[i]
then
begin
over
:=
false;
exit;
end;
if
a.num[i]
>
b.num[i]
then
begin
over
:=
true;
exit;
end;
end;
over
:=
false;
end;’
begin
readln(s);
fillchar(target.num,
sizeof(target.num),
0);
target.1en
:=
1ength(s);
for
i
:=
1
to
target.1en
do
target.num[i]
:=
ord(s[target.1en
–
i
+
1])
-
___⑦___;
filichar(left.num,
sizeof(1eft.num),
0);
left.1en
:=
1;
left.num[i]
:=
1;
right
:=
target;
repeat
middle
:=
average(1eft,
right);
if
over(___⑧___)
then
right
:=
middle
else
1eft
:=
middle;
until
over(plustwo(1eft),
right);
for
i
:=
left.1en
downto
1
do
write(1eft.num[i]);
writeln;
end.
2.
(笛卡尔树)对于一个给定的两两不等的正整数序列,笛卡尔树是这样的一棵二叉树:首先,它是一个最小堆,即除了根结点外,每个结点的权值都大于父节点的权值;其次,它的中序遍历恰好就是给定的序列。例如,对于序列7、2、12、1、10、5、15、3,下图就是一棵对应的笛卡尔树。现输入序列的规模n(1≤n<100)和序列的n个元素,试求其对应的笛号尔树的深度d(根节点深度为1),以及有多少个叶节点的深度为d。
const
SIZE
=
100;
INFINITY
=
1000000;
var
n,
maxDeep,
num,
i
:
integer;
a
:
array[1..SIZE]
of
integer;
procedure
solve(1eft,
right,
deep
:
integer);
var
i,
j,
min
:
integer;
begin
if
deep
>
maxDeep
then
begin
maxDeep
:=
deep;
num
:=
1;
end
else
if
deep
=
maxDeep
then
___①___;
min
:=
INFINITY;
for
i
:=
1eft
to
right
do
if
min
>
a[i]
then
begin
min
:=
a[i];
___②___;
end;
if
left
<
j
then
___③___;
if
j
<
right
then
___④___;
end;
begin
readln(n);
for
i
:=
1
to
n
do
read(a[i]);
maxDeep
:=
0;
solve(1,
n,
1);
writeln(maxDeep,
‘
’,
num);
end.
CCF
NOIP2011提高组(Pascal语言)参考答案与评分标准
一、单项选择题(共10题,每题1.5分,共计15分)
1
2
3
4
5
6
7
8
9
10
B
B
A
D
B
A
C
D
B
A
二、不定项选择题(共10题,每题1.5分,共计15分,多选或少选均不得分)
1
2
3
4
5
6
7
8
9
10
CD
ABCD
AB
BC
BC
ABD
CD
A
BCD
ABC
三、问题求解(共2题,每题5分,共计10分)
1.9
2.4
四、阅读程序写结果(共4题,每题8分,共计32分)
1.3
2.1
2
5
13
34
3.150
4.57344
五、完善程序(第1题,每空2分,第2题,每空3分,共计28分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1.①
ans.num[i
+
j
-
1]
②
ans.num[i]
:=
ans.num[i]
mod
10;
③
ans.num[i]
+
a.num[i]
+
b.num[i];
④
ans.num[i]
mod
2
(或
ans.num[i]
and
1)
⑤
inc(ans.len)
(或
ans.len
:=
ans.len
+
1)
⑥
a.len
<
b.len
⑦
ord('0')(或48)
⑧
times(middle,
middle),
target
2.①
inc(num)
(或
num
:=
num
+
1)
②
j
:=
i
③
solve(left,
j
-
1,
deep
+
1)
④
solve(j
+
1,
right,
deep
+
1)
PAGE
295全国分区联赛
高中组(初赛)
首届
“同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛试题(高中组)
竞赛用时:2小时
一、基础题
<1>.执行
①
C>
DIR
命令后,屏幕上显示如下画面:
FORMAT
COM
12145
SYS
COM
4878
PUC
BAT
126
XCOPY
EXE
11216
4
File(s)
123456
bytes
free
接着又顺序执行了如下几条DOS命令:
②
C>
DIR
>
DF.TXT
③
C>
TYPE
DF.TXT
④
C>
DIR
试问:执行命令③和④在屏幕上显示的结果是否与①相同?
<2>.
列举一个问题,使问题的解能对应相应的算法
例如对算法
X:=10;
Y;=5;
READ(M,N);
S:=X
M-Y
N;
可列举出如下的问题:
学生答题,答对一题可得10分,答错一题则要扣去5分,输入答对的题数(M)与答错的题数(N),求最后得分(S)是多少?
现有以下算法:
K:=0;
FOR
I:=0
TO
10
DO
K:=K
+(50-I
5)
DIV
2
+
1;
请列出一个相应的问题。
<3>.有标号为A、B、C、D和1、2、3、4的8个球,每两个球装一盒,分装4盒。标号为字母的球与标号为数字的球有着某种一一对应的关系(称为匹配)并已知如下条件:
①
匹配的两个球不能在一个盒子内;
②
2号匹配的球与1号球在一个盒子里;
③
A号和2号球在一个盒子里;
④
B匹配的球和C号球在一个盒子里;
⑤
3号匹配的球与A号匹配的球在一个盒子里;
⑥
4号是A或B号球的匹配球;
⑦
D号与1号或2号球匹配;
请写出这四对球匹配的情况。
<4>.从入口(1)到出口(17)的可行路线图中,数字标号表示关卡:
现将上面的路线图,按记录结构存储如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
NO
1
2
18
7
3
12
4
19
8
5
13
16
6
14
15
9
17
…
PRE
0
1
1
1
2
2
2
3
4
5
6
8
10
11
11
11
12
…
请设计一种能从存储数据中求出入口到出口经过最少关卡路径的算法。
二、根据题目要求,补充完善以下伪代码程序:
<1>.求出二个整形数组错位相加的最大面积。
1.
数组面积的定义:(限定数组头尾不为0)
设有一个数组C=(4
,
8
,
12
,
0
,
6),
则C的面积的定义为:
Sc=
(4+8)
/
2
+
(8+12)
/
2
+
12
/
2
+
6
/
2
也就是说,Sc=各梯形面积之和(其中梯形的高约定为1,三角形作为梯形的特殊情况处理)。
又如
D
=
(
12
,
24
,
6
)
时,其面积的定义为:
Sd
=
(12+24
)
/
2
+
(
24
+
6
)
/
2
2.
数组错位相加的定义
设有2个正整数的数组a
,
b,长度为n,当n
=5时:
a
=
(
34
,
26
,
15
,
44
,
12
)
b
=
(
23
,
46
,
4
,
0
,
18
)
对a、b进行错位相加,可能有下列情况:
34
26
15
44
12
+)
23
46
4
0
18
34
26
15
44
12
23
46
4
0
18
或:
34
26
15
44
12
+)
23
46
4
0
18
34
26
15
44
35
46
4
0
18
或:
34
26
15
44
12
+)
23
46
4
0
18
34
26
15
67
58
4
0
18
或:
……
最后有:
34
26
15
44
12
+)
23
46
4
0
18
23
46
4
0
18
34
26
15
44
12
可以看到:由于错位不同,相加的结果也不同。
程序要求:找出一个错位相加的方案,使得输出的数组面积为最大。
【算法提要】:设a
,
b的长度为10,用
a
,
b
:
array
[
1
.
.
10
]
of
integer
表示,其结果用数组
c
,
d
:
array
[
1
.
.
30
]
of
integer表示。
错位相加的过程可以从开始不重叠,然后逐步重叠,再到最后的不重叠。
梯形面积的计算公式为:(上底
+
下底)
高
/
2,其中约定高为1,故可写为(上底+下底)/
2。
程序:
const
n
=
10;
……
function
sea
:
real;
{计算数组C面积}
begin
j1:=1;
while
①
do
j1:=j1+1;
if
j1
=
3
n
then
sea:=0
else
begin
j2:=3
n;
while
②
do
j2:=j2-1;
if
j1
=
j2
then
sea:=0
else
begin
j3:=c[
j1]
+
c[
j2
];
for
j4:=j1+1
to
j2-1
do
j3
:=
j3
+
c[j4]
2;
sea:=j3
/
2
end
end;
begin
{主程序}
for
i:=1
to
n
do
read
(a[
i
]);
for
j:=1
to
n
do
read
(b[
j
]);
③
;
for
i:=1
to
2
n+1
do
begin
for
j:=1
to
3
n
do
④
;
for
j:=1
to
n
do
c[
j+n
]:=
a
[
j
];
for
j:=1
to
n
do
⑤
;
p:=sea;
if
p
>
s
then
begin
d:=c;
s:=p
end;
end;
for
i:=1
to
3
n
do
write
(d[
i
]
,
‘
’);
writeln;
writeln
(‘s=’
,
s)
end.
<2>.表的操作:设有一个表,记为L=(a1
,
a2
,
…
,
an),其中:
L:表名;
a1
,
a2
,
…
,
an为表中元素;
当ai为0~9数字时,表示元素,为大写字母时表示是另一个表,但不能循环定义。
例如下列表的定义是合法的(约定L是第一个表的表名)。
L=(1,3,K,8,0,4)
K=(3,P,4,H,7)
P=(2,3)
H=(4,0,5,3)
程序要求:
当全部表给出之后,求出表中所有元素的最大元素,以及表中全部元素的和。
【算法提要】
表用记录类型定义:
设lmax为表中元素最大个数
tabtype
=
record
length
:
0..lmax;
{长度}
element
:
array
[1..lmax]
of
char;
{表体}
end;
再定义队列:
qtype
=
record
base
:
array
[0..lmax]
of
char;
front
,
rear
:
0..lmax;
end;
为此,设计一个字符入队的过程inqueue,出队函数outquere,表中最大元素及元素求和均采用递归计算。
程序:
const
lmax
=
38
;
……
var
t
:
array
[
‘A’
.
.
‘Z’
]
of
tabtype;
s
:
string
[
lmax
];
procedure
inqueue
(
var
q
:
qtype;
c
:
char
);
begin
q.rear
:=
①
;
q.base
[
q.rear
]
:=
c
end;
function
outqueue
(
var
q
:
qtype
)
:
char;
begin
q.front
:=
②
;
outqueue
:=
q.base
[
q.front
]
end;
function
maxnumber
(
c
:
char
)
:
char;
var
max
:
char;
begin
max
:=
chr
(0);
for
i:=1
to
t[c].length
do
begin
ch
:=
t[c].element[i];
if
③
then
m
:=
maxnumber
(ch)
else
m
:=
ch;
if
maxthen
max:=m
end;
④
end;
function
total
(
c
:
char
)
:
integer;
var
k
,
i
:
integer;
begin
k
:=
0;
for
i
:=
1
to
t[c].length
do
begin
ch
:=
t[c].
lelment[
i
];
if
⑤
then
m
:=
total
(ch)
else
m
:=
ord
(ch)–ord
(‘0’);
k
:=
k
+
m
end;
total
:=
k
end;
begin
max
:
=
36;
for
tabno
:=
’A’
to
‘Z’
do
t
[tabno].
length
:=
0;
q.front
:=
0;
q.rear
:=
0;
inqueue
(q
,
’L’);
while
q.
front
<>
q.
rear
do
begin
tabno
:=
outqueue
(q);
write
(
tabno
,
‘=’
);
readln
(s);
i
:=
1;
while
s[
i
]
<>
‘(’
do
i:=i+1;
while
s[
i
]
<>
‘)’
do
begin
if
(s[
i
]
>=
‘a’)
and
(s[
i
]
<
=
’z’)
then
s[
i
]:=
chr
(
ord
(s[
i
])
+
ord
(‘A’)-
ord
(‘a’)
);
if
(s[
i
]
>=
‘A’)
and
(s[
i
]
<
=
‘Z’)
then
begin
inc
(
t
[
tabno
].
length
);
t
[
tabno
].
element
[
t
[
tabno
].
length
]
:=
s[
i
];
inqueue
(
q
,
s[
i
]
)
end
else
if
(
s[
i
]
>=
’0’)
and
(s[
i
]
<
=
’9’)
then
begin
inc
(
t
[
tabno
].
length
);
[
tabno
].
element
[
t
[
tabno
].
length
]:=
s[
i
]
end;
inc
(
i
)
end;
end;
writeln
(‘the
max
number
in
table
L
is
:
’,
maxnumber
(‘L’)
);
writeln
(‘Total
is
:
’
,
total
(‘L’)
)
end.
<3>.设有一个实数,以字符串形式存放于数组x中,用x
:
array
[
1.
.
n
]
of
char
表示。其中x
[1]
若为‘-’,表示负数;若为
‘
+
’,‘
.
’,‘
’,则表示正数。若为数字,也认为是正数。
例如
x
=
(
‘
’
,
‘2’
,
‘0’
,
‘
’
,
‘
3’
,
‘
.
’
,
‘5’
,
‘%’
)
则表示
203.5
x
=
(
‘-’
,
‘1’
,
‘
.
’
,
‘
’
,
‘2’
,
‘0’
,
‘%’
)
则表示
-1.2
约定:
在字符串x中,除x
[1]
外,其后可以包含有若干个‘
.
’与‘
’,但仅以第一次出现为准,空格不起任何作用,并以字符
‘
%’
作为结束标志。
程序要求:将输入的字符串还原成实数(小数点后无用的0应除去),还原的结果以下列形式存放(不需要输出)
f
:
数符。正数放0,负数放1。
a
:
array
[
1.
.
n
]
of
integer;
存放数字,不放小数点。
k
:
表示A中有效数字的个数。
j
:
表示小数点后的位数。
例如:数203.24,还原后结果的存放是:
f
=
0
a
=
(
2
,
0
,
3
,
2
,
4
)
k
=
5
j
=
2
又如:数
-33.0740,还原后结果的存放是:
f
=
1
a
=
(
3
,
3
,
0
,
7
,
4
)
k
=
5
j
=
3
【算法提要】
x
:
array
[
1
.
.
10
]
of
char;
可放长度定为10;首先读入字符串,然后处理数的符号,在还原的过程中,需要判定正数部分与小数部分,同时去除多余的空格和小数点,并约定输入是正确的,不用作出错检查。
程序:
begin
for
i:=1
to
10
do
a[
i
]:=0;
for
i:=1
to
10
do
read
(x
[
i
]);
j:=0;
f:=0;
k:=0;
b:=0;
if
x
[1]=
‘-’
then
begin
①
②
end
else
if
x[1]:=
‘
’
then
i
:=
2
else
i
:=
1;
while
③
do
i
:=
i
+
1;
while
④
do
begin
if
(
x[
i
]
>
=
‘0’
)
and
(
x[
i
]
<
=
‘
9’
)
then
begin
k
:=
k
+
1;
⑤
;
if
b=1
then
⑥
end
else
if
(
x[
i
]
=
’
.
’
)
and
(
b
=
0
)
then
b
:=
1;
i
:=
i
+
1
end
if
j
>
0
then
while
a[
k
]=0
do
begin
⑦
⑧
end
end.
(13
)
(14
)
(15
)
(16)
(17)
(12)
(1)
(2)
(3)
(
9
)
(10
)
(11)
(7)
(4)
(5)
(6)
(8)
(19
)
(18
)
4
8
12
0
6
12
24
6
2-22002
全国分区联赛
高中组(初赛)
第八届全国青少年信息学奥林匹克联赛(NOIP2002)初赛试题
(提高组PASCAL语言
二小时完成)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一.选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题1.5分,多选无分,共30分)
1.
微型计算机的问世是由于(
)
的出现。
A)中小规模集成电路
B)晶体管电路
C)
(超)大规模集成电路
D)
电子管电路
2.
中央处理器(CPU)能访问的最大存储器容量取决于(
)
。
A)地址总线-
B)数据总线
C)
控制总线
D)
实际内存容量
3.
十进制数11/128可用二进制数码序列表示为:(
)
。
A)1011/1000000
B)1011/100000000
C)
0.001011
D)
0.0001011
4.
算式(2047)10-(3FF)16+(2000)8的结果是(
)
。
A)(2048)10
B)(2049)10
C)
(3746)8
D)
(1AF7)16
5.
已知x=(0.1011010)2,则[x/2]补=(
)
2
。
A)
0.1011101.
B)
11110110
C)
0.0101101
D)
0.100110
6.
Ip
v4地址是由(
)
位二进制数码表示的。
A)16
B)32
C)
24f
D)
8
7.
计算机病毒传染的必要条件是:(
)
。
A)
在内存中运行病毒程序
B)
对磁盘进行读写操作
C)
在内存中运行含有病毒的可执行程序
D)
复制文件
8.
在磁盘上建立子目录有许多优点,下列描述中不属于建立子目录优点的是(
)
。
A)
便于文件管理
B)
解决根目录中目录项个数有限问题
C)
加快文件查找速度
D)
节省磁盘使用空间
9.
在使用E-mail前,需要对Outlook进行设置,其中ISP接收电子邮件的服务器称为(
)服务器。
A)POP3
B)SMTP
C)
DNS
D)
FTP
10.
多媒体计算机是指(
)
计算机。
A)
专供家庭使用的
B)
装有CD-ROM的
B)
连接在网络上的高级
D)
具有处理文字、图形、声音、影像等信息的
11.
微型计算机中,(
)
的存取速度最快。
A)高速缓存
B)外存储器
C)
寄存器
D)
内存储器
12.
资源管理器的目录前图标中增加"+"号,这个符号的意思是(
)
。
A)该目录下的子目录已经展开
B)该目录下还有子目录未展开
C)
该目录下没有子目录
D)
该目录为空目录
13.在WORD文档编辑中实现图文混合排版时,关于文本框的下列叙述正确的是(
)
。
A)
文本框中的图形没有办法和文档中输入文字叠加在一起,只能在文档的不同位置
B)
文本框中的图形不可以衬于文档中输入的文字的下方。
C)
通过文本框,可以实现图形和文档中输入的文字的叠加,也可实现文字环绕。
D)
将图形放入文本框后,文档中输入的文字不能环绕图形。
14.一个向量第一个元素的存储地址是100,每个元素的长度是2,
则第5个元素的地址是(
)。
A)110
B)108
C)
100
D)
109
15.已知A=35H,则A∧05H∨A∧3OH的结果是:(
)
。
A)30H
B)05H
C)
35H
D)
53H
16.设有一个含有13个元素的Hash表(0~12),Hash函数是:H(key)=key
%
13,其中%是求余数运算。用线性探查法解决冲突,则对于序列(2、8、31、20、19、18、53、27),18应放在第几号格中(
)
。
A)
5
B)
9
C)
4
D)
0
17.按照二叉树的定义,具有3个结点的二叉树有(
)
种。
A)
3
B)
4
C)
5
D)
6
18.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(
)
倍。
A)
1/2
B)1
C)
2
D)
4
19.要使1...8号格子的访问顺序为:8、2、6、5、7、3、1、4,则下图中的空格中应填入(
)
。
1
2
3
4
5
6
7
8
4
6
1
-1
7
3
2
A)
6
B)
0
C)
5
D)
3
20.设找S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若出队的顺序为e2,e4,e3,e6,e5,e1,则钱S的容量至少应该为(
)
。
A)
2
B)
3
C)
4
D)
5
二.问题求解(6
+
8
=14分)
1.
在书架上放有编号为1,2,....n的n本书。现将n本书全部取下然后再放回去,当放回去时要求每本书都不能放在原来的位置上。
例如:n=3时:
原来位置为:
1
2
3
放回去时只能为:
3
1
2
或
2
3
1
这两种
问题:
求当n=5时满足以上条件的放法共有多少种?(不用列出每种放法)
2.
设有一棵k叉树,其中只有度为0和k两种结点,设n0,nk
分别表示度为0和度为k的结点个数,试求出n0,nk之间的关系
(
n0
=
数学表达式,数学表达式仅含nk
、k和数字)。
三.阅读程序,并写出正确的运行结果(8
+
9
+
9
=
26分)
1.program
Gxp1;
var
i,n,jr,jw,jb
:
integer;
ch1
:
char;
ch
:
array[1..20]d
char;
begin
readln(n);
for
i:=1
to
n
do
read(ch[i]):
jr:=1;
jwz=n;
jb:=n;:
while
(jr<=jw)
do
begin
if
(ch[jw]='R')
then
begin
ch1:=Ch[jr];
ch[jr]:=ch[jw];
ch[jw]:=ch1:
jr:=jr+1;
end
else
if
ch[jw]='W'
then
jw:=jw-1
else
begin
ch1:=ch[jw];ch[jw]:=ch[jb];ch[jb]:=ch1;jw:=jw-1;jb:=jb-1;
end;
end;
for
i:=1
to
n
do
write(ch[i]);
writeln;
end.
输入:
10
RBRBWWRBBR
输出:
2.
program
Gxp2;
var
i,j,s,sp1
:
integer;
p
:
boolean;
a
:
array[1..10]
of
integer;
begin
sp1:=1;
a[1]:=2;
j:=2:
while
sp1<10
do
begin
j:=j+1;
p:=true;
for
i:=2
to
j-1
do
if
(j
mod
i=O)
then
p:=false;
if
p
then
begin
sp1:=sp1+1;
a[sp1]:=j;
end;
end;
j:=2;
p:=true;
while
p
do
begin
s:=1;
for
i:=1
to
j
do
s:=s
a[i];
s:=s+1;
for
i:=2
to
s-1
do
if
s
mod
i=O
then
p:=false;
j:=j+1;
end;
writeln(s);
writeln;
end.
输出:
3.
program
Gxp3
var
d1,d2,X,Min
:
real;
begin
min:=10000;
X:=3;
while
X<15
do
begin
d1:=sqrt(9+(X-3)
(X-3));
d2:=sqrt(36+(15-X)
(15-X));
if
(d1+d2)then
Min:=d1+d2;
X:=x+0.001;
end;
writeln(Min:1O:2);
end.
输出:
四.完善程序:
(
15
+
15
=
30分)
1.问题描述:工厂在每天的生产中,需要一定数量的零件,同时也可以知道每天生产一个零件的生产单价。在N天的生产中,当天生产的零件可以满足当天的需要,若当天用不完,可以放到下一天去使用,但要收取每个零件的保管费,不同的天收取的费用也不相同。
问题求解:求得一个N天的生产计划(即N天中每天应生产零件个数),使总的费用最少。
输入:N
(
天数
N<=29
)
每天的需求量(N个整数)
每天生产零件的单价(N个整数)
每天保管零件的单价(N个整数)
输出:每天的生产零件个数(N个整数)
例如:当N=3时,其需要量与费用如下:
第一天
第二天
第三天
需
要
量
25
15
30
生产单价
20
30
32
保管单价
5
l0
0
生产计划的安排可以有许多方案,如下面的三种:
第一天
第二天
第三天
总的费用
25
15
30
25
2O
+
15
30
+
30
32
=
1910
40
0
30
40
20
+
15
5
+
30
32
=
1835
70
0
0
70
20
+
45
5
+
30
10
=
1925
程序说明:
b[n]:存放每天的需求量
c[n]:每天生产零件的单价
d[n]:每天保管零件的单价
e[n]:生产计划
程序:
Program
exp5;
Var
i,j,n,yu,j0,j1,s:integer;
b,c,d,e:
array[0..30]of
integer;
begin
readln(n);
for
i:=1
to
n
do
readln(b[[i],c[I],d[i]];
fori:=1
to
n
do
e[i]:=0;
①
:=10000;c[n+2]:=0;b[n+1]:=0;jO:=1;
while
(jO<=n)do
begin
yu:=c[j0];
j1:=jO;
s:=b[j0];
while
②
do
begin
③
j1:=j1+1;s:=s+b[j1];
end;
④
jO:=j1+1;
end;
for
i:=1
to
n
do
⑤
readln;
end.
2.问题描述:
有n种基本物质(n≤10),分别记为P1,P2,……,Pn,用n种基本物质构造物品,这些物品使用在k个不同地区(k≤20),每个地区对物品提出自己的要求,这些要求用一个n位的数表示:α1α2……αn
,其中:
αi
=
1
表示所需物质中必须有第i种基本物质
=-1
表示所需物质中必须不能有第i种基本物质
=
0
无所谓
问题求解:
当k个不同地区要求给出之后,给出一种方案,指出哪些物质被使用,哪些物质不被使用。
程序说明:
数组b[1],b[2],...,b[n]
表示某种物品
a[1..k,1..n]
记录k个地区对物品的要求,其中:
a[i,j]=
1
表示第i个地区对第j种物品是需要的
a[i,j]=
0
表示第i个地区对第j种物品是无所谓的
a[i,j]=-1
表示第i个地区对第j种物品是不需要的
程序:
program
gxp2;
var
i,
j
,k,
n
:
integer;
p
:
boolean;
b
:
array
[0..20]
of
0..1;
a
:
array[1..20,1..10]
of
integer;
begin
readln(n,k);
for
i:=1
to
k
do
begin
for
j:=1
to
n
do
read(a[i,j]);
readln;
end;
for
i:=O
to
n
do
b[i]:=0;
p:=true;
while
①
do
begin
j:=n;
while
b[j]=1
do
j:=j-1;
②
for
i:=j+1
to
n
do
b[i]:=0;
③
for
i:=1
to
k
do
for
j
:=1to
n
do
if(
a[i,j]=1
)
and
(b[j]=0)
or
④
then
p:=true;
end;
if
⑤
then
writeln('找不到!
')
else
for
i:=1
to
n
do
if
(b[i]=1)
then
writeln('物质',i,
'需要')
else
writeln('物质',i,'不需要');
end.
·2·NOIP2009年提高组(Pascal语言)参考答案与评分标准
一、单项选择题:(每题1.5分)
1.
C
2.
A
3.
D
4.
B
5.
D
6.
B
7.
B
8.
A
9.
A
10.
C
二、
不定项选择题
(共10题,每题1.5分,共计15分。每题正确答案的个数大于或等于1。多选或少选均不得分)。
1.
AB
2.
BD
3.
BC
4.
C
5.
BD
6.
ABD
7.
AC
8.
ABC
9.
ABCD
10.
ACD
三、问题求解:(共2题,每空5分,共计10分)
1.432
2.35
四、阅读程序写结果(共4题,每题8分,共计32分)
1.
3
2.
5850
3.
487
(杨辉三角)
4.
0.(384615)(分数变小数)
五.完善程序
(前5空,每空2分,后6空,每空3分,共28分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1.
①
0
②
tmp+a[i]=ans或者
a[i]+tmp=ans
或者ans=a[i]+tmp等
③
<0
④
i
⑤
inc(tmp,
a[i])或者tmp
:=
tmp+a[i]
2.
①
now<=maxnum
或者
not(now>maxnum)
②
second-first
③
(ans-1)
④
hash[first]>=ans
或者
hash[second]>=ans
或者
hash[first+delta]>=ans
⑤
ok
⑥
work(0)
1
1第十九届全国青少年信息学奥林匹克联赛初赛(提高组)试题解析
下午带学生去比赛,回来应学生要求,将这份试卷认真做了一遍,以下答案仅供参考,如有错误,欢迎批评指正,谢谢!
一、单选题(15
1.5)
1、A,一个字节有8个bit,32位整型变量占用4个字节,故选A。
2、A,二进制11.01转为十进制,(11.01)2
=
1
2+1+0
0.5+1
0.25
=
(3.25)10
。
3、B,老和尚给小和尚讲的故事里边有故事本身,递归是函数内部调用函数本身,故选B,递归。
4、D,香农信息论鼻祖。
5、A,一定是满二叉树时拥有2个字节点的节点数最多,最下一层会有2013-1023=990个节点,于是倒数第二层会有990/2=495个节点有2个字节点,从第1层到倒数第三层共有1023-2^9=511个节点,且这些节点都是用2个子节点的节点,所以共有495+511=1006个,选A。
6、B,要使图不联通,只要其中某一个节点不连通即可,所有顶点度最少是3,所以最少需要删除3条边,选B。
7、D,此题最开始一眼扫到的时候脑子进水,跟学生将选B,O(n),实际上不是,计算F1需要1次,计算F2需要一次,计算Fn需要计算F(n-1)的次数加上F(n-2)的次数,所以其实就是计算Fn次,于是答案选择D,至于这个Fn到底是多大,数学上可以计算,它等于O(((1+sqrt(5))/2)^n).
8、B,这个必须是B,没有什么好说的,中序遍历保证左边都是小于根的,右边都是大于根的,所以可以保证是一个有序序列。
9、D,A项6和17对11取余都是6发生冲突,B项10的平方和17的平方对11取余都是1发生冲突,C项6的两倍和17的两倍对11取余都是1发生冲突,D项分别为1,2,3,4,不冲突。
10、D,IPV6地址是128位的。谢谢网友指正!
11、C,二分为6个和6个的顶点,此时边最多,有36条边。
12、B,我的学生几乎全选A去了,因为之前讲题只介绍过ASCII码,但是看到统一二字也应该想到Uni...前缀啊。
13、D,64位非零浮点数强制转换成32位浮点数,两个数会有大小上的细微差别,但不会发生符号变化,因为有专门的符号位。
14、B,Dijkstra算法计算单源最短路时间复杂度如果不借助堆或优先队列优化,是O(n^2).
15、B,此题和学生讲的时候又是脑子进水了,我一眼扫以为选A,后来令n=2,4,8,16等值带如递推式,发现计算出来的T(n)和n不成线性关系,也不成n^2关系,仔细研究了一下,发现其实是nlgn,具体可以画图证明。
二、不定项选择题(5
1.5)
1、AC,求1,2,...100的和,这个平时练习过很多次。
2、AD,只有快速排序和归并排序是nlgn的,冒泡和插入都是n^2的时间复杂度。
3、CD,此题最开始以为选BD,因为我题目错看成宽度优先搜索了。
4、AB,如果一个问题复杂度是该问题的一个实例规模n的多项式函数,则这种可以在多项式时间内解决的问题属于P类问题;可以在多项式时间内验证一个解是否正确的问题称为NP类问题;可以在多项式时间内解决的问题一定可以在多项式时间内验证,所以P类问题一定属于NP类问题,故此题应选择AB,D我看错了,NP类问题显然不是说在指数时间内能够解决的问题,谢谢网友提示!。
5、ABCD,此题完全不会,因为是第一次带学生参赛,对复赛什么情况完全不了解,个人觉得程序名、输出文件名这类问题不应该是什么大问题应该允许申诉,但对BD这些没按规定要求做的肯定不会受理的,网友回复说选ABCD,那就暂时改为ABCD,如有其他声音,欢迎批评指正。
三、问题求解(2
5)
1、0
1
1
1;此题应该算是简单题,密码都是0或1,所以根据第5项可以很轻松得到S1=0,再根据第1项可以得到S2=1,再根据第3项可以S3=1,最后根据第2项得到S4=1,然后利用第4项进行验证发现可行。
2、37/12,此题最开始看到做不出来,只知道这是一道求数学期望的题目。计算n=2为什么平均一共跳2次的时候,我最开始是这么想的,1次跳到1处的概率是1/2,2次的概率是1/4,3次是1/8.。。。于是数学期望Ex=1
1/2+2
1/4+3
1/8+......=2,但是这样的计算对于后边n=3,得情况却怎么都算不了,于是想到递归,设从2跳到1的期望是f2,那么有1/2的概率是一次跳到1,还有1/2的概率是(1+f2)次跳到1,即第一次没有跳到1,跳到2的情况,于是可以列出等式:f2=1
1/2+(1+f2)
1/2,解出f2=2;对于n=3,则有1/3的概率一次跳到1,有1/3的概率(1+f2)次跳到1,即第一次跳到2,再从2跳到1的过程,最后还有1/3的概率(1+f3)次跳到1,于是f3=1/3+(1+f2)
1/3+(1+f3)
1/3,解出f3=2.5;同理f4=1/4+(1+f2)
1/4+(1+f3)
1/4+(1+f4)
1/4,解出f4=17/6;f5=1/5+(1+f2)
1/5+(1+f3)
1/5+(1+f4)
1/5+(1+f5)
1/5,解出f5=37/12.
四、阅读程序写结果(4
8)
1、Yes,此程序判断给定字符串是否是回文串。显然输入串"abceecba"是回文串。
2、133,此题计数1-1000范围内能够整除10或15的数有多少个,使用容斥原理或者集合求并很容易可以得到1000/10+1000/15-1000/30=133.
3、4,此题实际上是一种简单的动态规划的方法找最长递增串的长度,从输入数据3
2
5
11
12
7
4
10来看,显然最长的递增串可以是3
5
11
12,长度为4;
4、7,似乎二分图染色问题,手动模拟出结果为7.
五、完善程序(15+13)
1、n-p+i
?i-p+1
?a[i-p]
?i>end1
?i
?j-1;
序列重排还是比较简单的一道题目,第一种方法是通过开一个b数组,然后先将a数组中1到p的数复制到b数组中n-p+1到n,将p+1到n区间的数复制到b数组1,n-p,最后再将b数组元素复制回a数组中;显然第一空是n-p+i。
第二种方法是以时间换空间的方法,每一次先将要移到前面的数保存在temp中,然后将前面那p个数依次往后移,再将空出来的那个位置存temp;所以第二个空和第三个空分别是i-p+1和a[i-p]。
第三种方法的实际上是一种递归的思想,第四、五、六空分别是
i〉end1
i,i,j-1
2、j-i
?
cur1
?
count1--;
?
count2--;
?
cur1=a[j],此题没什么好说的,题目中的注释已经讲得很明白了。第十二届全国青少年信息学奥林匹克联赛初赛试题
(
?提高组
?Pascal
语言?
二小时完成
?)
由整理收集
(?http:?/??/?www.?)
?
●●??
?全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效??
?●●
?
?
?
一、
?单项选择题
?(共
10
题,每题
1.5
分,共计
15
分。每题有且仅有一个正确答案.)。
?
?
1.
在以下各项中。(??
?)不是
CPU
的组成部分。
A.
控制器?????
B.
运算器?????
C.
寄存器?????
D.
ALU?????
E.
RAM
?
?
2.
BIOS(基本输入输出系统)是一组固化在计算机内(???????
)上一个
ROM
芯片上的程序。
A.
控制器?????
B.
CPU??????
C.
主板??????
D.
内存条???
E.
硬盘
?
?
3.在下面各世界顶级的奖项中,为计算机科学与技术领域作出杰出贡献的科学家设立的奖项是(??????????
)。
A.
沃尔夫奖???????
B.
?诺贝尔奖?????????
C.
菲尔兹奖
D.
图灵奖????????
E.
?南丁格尔奖
?
?
4.在编程时(使用任一种高级语言,不一定是
Pascal),如果需要从磁盘文件中输入一个很大的二维
数组(例如
1000
1000
的
double
型数组),按行读(即外层循环是关于行的)与按列读(即外层循
环是关于列的)相比,在输入效率上(
)。
A.
没有区别????????????????
B.
有一些区别,但机器处理速度很快,可忽略不计
C.
按行读的方式要高一些??????
D.
按列读的方式要高一些???????
E.
取决于数组的存储方式。
?
?
5.在
Pascal
语言中,表达式
?(21
xor
2)的值是(?????
)
?
A.
441??????
B.
42??????
C.23?????
D.24??????
E.25
?
?
6.在
Pascal
语言中,判断
a
不等于
0
且
b
不等于
0
的正确的条件表达式是(???????
)
?
A.
not
a=0
or
not
b=0
?B.
not((a=0)and(b=0))?????????
C.
not(a=0
and
b=0)
D.
(a<>0)or(b<>0)?
E.
(a<>0)and
(b<>0)
?
7.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从
这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的
顺序为
1,2,3,……,则车辆出站的顺序为(??
?)。
?
A.
1,
2,
3,
4,
5????????
B.
1,
2,
4,
5,
7????????
C.
1,
4,
3,
7,
6
?
D.
1,
4,
3,
7,
2????????
E.
1,
4,
3,
7,
5
?
?
8.高度为
n
的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为
n-1
的满二叉树。在这里,树高等于叶结点的最大深度,根结点的深度为
0,如果某个均衡的二叉树共有
2381
个结点,
则该树的树高为(??
?)。
A.
10?????
B.
11??????
C.
12?????
D.
13??????
E.
210
–
1
?
?
9.
与十进制数
1770.625
对应的八进制数是(??
?)。由收集
(?http:?/??/?www."
\t
"_blank?)
?
A.
3352.5??????????????
B.
3350.5??????????????
C.
3352.1161
D.
3350.1151??????????
E.
前?4
个答案都不对
?
?
10.将
5
个数的序列排序,不论原先的顺序如何,最少都可以通过(??
?)次比较,完成从小到大的排序。
?
A.
6??????
B.
7???????
C.
8??????
D.
9???????
E.
10
?
?
二、
?不定项选择题
?(共
10
题,每题
1.5
分,共计
15
分。每题正确答案的个数大于或等于
1。多选
或少选均不得分)。
?
?
11.
设A=B=D=true,C=E=false,以下逻辑运算表达式值为真的有(??
?)。
A.
(A∧B)∨(C∧D)∨E
B.??(((A∧B)∨C)∧D∧E)
C.
A∧(B∨C∨D∨E)????????
D.
(A∧(B∨C))
∧D∧E
?
?
12.
?(2010)16
+
(32)8的结果是(??
?)。
?
A.
(8234)10?????????????????
B.
(202A)16
?
C.
(100000000110)2??????
D.
(2042)16
?
?
13.
设栈S的初始状态为空,元素a,
b,
c,
d,
e
依次入栈,以下出栈序列不可能出现的有(??
?)。
?
A.
a,
b,
c,
e,
d????????????
B.
b,
c,
a,
e,
d
?
C.
a,
e,
c,
b,
d????????????
D.
d,
c,
e,
b,
a
?
?
14.
已知
6
个结点的二叉树的先根遍历是
1
2
3
4
5
6(数字为结点的编号,以下同),后根遍历是
3
2
5
6
4
1,则该二叉树的可能的中根遍历是(??????
)由收集
(?http:?/??/?www."
\t
"_blank?)
?
A.
3
2
1
4
6
5????????????
B.
3
2
1
5
4
6
?
C.
2
3
1
5
4
6????????????
D.
2
3
1
4
6
5
?
?
15.
在下列各数据库系统软件中,以关系型数据库为主体结构的是(??
?)。
?
A.
ACCESS???????????????
B.
SQL
Server
?
C.
Oracle???????????????
D.
Foxpro
?
?
16.在下列各软件中,属于
NOIP
竞赛(复赛)推荐使用的语言环境有(???????
)。
?
A.
gcc/g++??????????????
B.
Turbo
Pascal
?
C.
Turbo
C??????????????
D.
free
pascal
?
17.
以下断电之后将不能保存数据的有(?????
)。
A.
硬盘?????
B.
ROM??????
C.
显存??????
D.
RAM
?
?
18.
在下列关于计算机语言的说法中,正确的有(??????
)。
A.
Pascal和C都是编译执行的高级语言
B.
高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上
C.
C++是历史上的第一个支持面向对象的计算机语言
D.
高级语言比汇编语言更高级,是因为它的程序的运行效率更高
?
?
19.
在下列关于计算机算法的说法中,正确的有(??????
)。
A.
一个正确的算法至少要有一个输入
B.
算法的改进,在很大程度上推动了计算机科学与技术的进步由收集
(?http:?/??/?www."
\t
"_blank?)
C.
判断一个算法的好坏,主要依据它在某台计算机上具体实现时的运行时间
D.
目前仍然存在许多涉及到国计民生的重大课题,还没有找到能够在计算机上实施的有效算法
?
?
20.
在下列关于青少年信息学竞赛的说法中,你赞成的是(???????
)(本题不回答为0分,答题一律满分)。
A.
举行信息学竞赛的目的,是为了带动广大青少年学科学、爱科学,为造就一大批优秀的计算机科学
与技术人才奠定良好的基础
B.
如果竞赛优胜者不能直接保送上大学,我今后就不再参与这项活动了
C.
准备竞赛无非要靠题海战术,为了取得好成绩,就得拼时间、拼体力
D.
为了取得好成绩,不光要看智力因素,还要看非智力因素。优秀选手应该有坚韧不拔的意志,有
严谨求实的作风,既要努力奋进,又要胜不骄败不馁
?
?
三.问题求解(共
2
题,每题
5
分,共计
10
分)
?
?
1.将
2006
个人分成若干不相交的子集,每个子集至少有
3
个人,并且:
(1)在每个子集中,没有人认识该子集的所有人。
(2)同一子集的任何?3
个人中,至少有?2
个人互不认识。
(3)对同一子集中任何
2
个不相识的人,在该子集中恰好只有
1
个人认识这两个人。
则满足上述条件的子集最多能有
??????????????????????????????????????
个?
?
?
2.将边长为
n
的正三角形每边
n
等分,过每个分点分别做另外两边的平行线,得到若干个正三角形,
我们称为小三角形。正三角形的一条通路是一条连续的折线,起点是最上面的一个小三角形,终点是最
下面一行位于中间的小三角形。在通路中,只允许由一个小三角形走到另一个与其有公共边的且位于同
一行或下一行的小三角形,并且每个小三角形不能经过两次或两次以上(图中是
?n=5
时一条通路的例
子)。设
n=10,则该正三角形的不同的通路的总数为_
????????
__。
?
?
?
?
四.阅读程序写结果(共?4
题,每题?8
分,共计?32
分)
?
?
1.
Program
ex401;
?
var
?
u,v:array[0..3]
of
integer;
?
i,x,y:integer;
?
begin
?
x:=10;
y:=10;
?
for
i:=0
to
3
do
read(u[i]);
v[0]:=(u[0]+u[1]+u[2]+u[3])
div
7;
v[1]:=u[0]
div
((u[1]-u[2])
div
u[3]);
v[2]:=u[0]
u[1]
div
u[2]
u[3];
v[3]:=v[0]
v[1];
x:=(v[0]+v[1]+2)-u[(v[3]+3)
mod
4];
?
if
(x>10)
then
?
y:=y+(v[2]
100-v[3])
div
(u[u[0]
mod
3]
5)由收集
(?http:?/??/?www."
\t
"_blank?)
?
else
?
y:=y+20+(v[2]
100-v[3])
div
(u[v[0]
mod
3]
5);
?
writeln
(x,',',y);
end.
?{
注:本例中,给定的输入数据可以避免分母为?0
或下标越界。??)
输入:9
3
9
4
输出:??????????????
?
?
?
2.Program
ex402;
?
const
?
m:array[0..4]
of
integer=(2,3,5,7,13);
?
var
i,j:integer;
t:
longint;
begin
for
i:=0
to
4
do
begin
t:=1;
?
for
j:=1
to
m[i]-1
do
?t:=t
2;
?
t:=(t
2-1)
t;
write
(t,'
');
end;
writeln;
?
end.
输出:_____?????????????????
?
?
?
3.
Program
ex403;
?
Const
?NN=7;
Type
Arr1=array[0..30]
of
char;
?
var
s:arr1;
k,p:integer;
?
function
fun1(s:arr1;
a:char;n:integer):integer;
?
var
j:integer;
begin
j:=n;
?
while
(a0)
do
dec(j);
?
fun1:=j;
?
end;
?
Function
fun2(s:arr1;
a:char;
n:integer):integer;
?
var
j:integer;
begin
j:=1;
?
while
(a>s[j])and(jdo
inc(j);
?
fun2:=j;
?
end;
?
begin
?
for
k:=1
to
NN
do
s[k]:=chr(ord('A')+2
k+1);
k:=fun1(s,'M',NN)+fun2(s,'M',NN);
writeln(k);
?
end.
输出:????????????
?
?
?
4.
program
ex404;
?
var
x,x2:longint;由收集
(?http:?/??/?www."
\t
"_blank?)
procedure
digit(n,m:longint);
?
var
n2:integer;
?
begin
?
if(m>0)
then
begin
n2:=n
mod
10;
?
write(n2:2);
?
if(m>1)
then
?digit(n
div
10,m
div
10);
?
n2:=n
mod
10;
write(n2:2);
end;
end;
?
begin
?
writeln('Input
a
number:');
?
readln(x);
?
x2:=1;
?
while(x2do
?x2:=x2
10;
?
x2:=x2
div
10;
digit(x,x2);
writeln;
end.
输入:9734526
输出:???????????????????????????????
?
?
五.完善程序??(前?5
空,每空?2
分,后?6
空,每空?3
分,共?28
分)
?
?
1.(选排列)下面程序的功能是利用递归方法生成从
1
到
n(n<10)的
n
个数中取
k(1<=k<=n)个数的
全部可能的排列(不一定按升序输出)。例如,当
n=3,k=2
时,应该输出(每行输出
5
个排列):
?
12
13
?21
?23
32
?
31
程序:
Program
ex501;
Var
i,n,k:integer;
a:array[1..10]
of
integer;
?
count:longint;
?
Procedure
?perm2(j:integer);
?
var
i,p,t:integer;
?
begin
?
if???
①???
then
?
begin
?
for
i:=k
to
n
do
begin
inc(count);
t:=a[k];
a[k]:=a[i];
a[i]:=t;
?
for???
②???
do???
write(a[p]:1);
?
write('
?');
?
t:=a[k];a[k]:=a[i];a[i]:=t;
?
if
(count
mod
5=0)
then
writeln;
?
end;
exit;
end;
for
i:=j
to
n
do
begin
t:=a[j];a[j]:=a[i];a[i]:=t;由收集
(?http:?/??/?www."
\t
"_blank?)
?
③??
;
?
t:=a[j];???
④??
;
?
end
end;
begin
writeln('Entry
n,k
(k<=n):');
?read(n,k);
?
count:=0;
?
for
i:=1
to
n
do
a[i]:=i;
⑤??
;
?
end.
?
?
2.(TSP
问题的交叉算子)TSP
问题(Traveling
Salesman
Problem)描述如下:给定
n
个城
市,构成一个完全图,任何两城市之间都有一个代价(例如路程、旅费等),现要构造遍历所有城市的环
路,每个城市恰好经过一次,求使总代价达到最小的一条环路。
?
遗传算法是求解该问题的一个很有效的近似算法。在该算法中,一个个体为一条环路,其编码方法
之一是
1
到
n
这
n
个数字的一个排列,每个数字为一个城市的编号。例如当
n=5
时,“3
4
2
1
5”
表示该方案实施的路线为
3->4->2->1->5->3。遗传算法的核心是通过两个个体的交叉操作,产生两
个新的个体。下面的程序给出了最简单的一种交叉算法。具体过程如下:
(1)选定中间一段作为互换段,该段的起止下标为?t1,t2,随机生成?t1,t2
后,互换两段。
(2)互换后,在每个新的排列中可能有重复数字,因而不能作为新个体的编码,一般再做两步处理:
(2.1)
将两个互换段中,共同的数字标记为?0,表示已处理完。
(2.2)
将两个互换段中其余数字标记为
1,按顺序将互换段外重复的数字进行替换。
例如:n=12,两个个体分别是:
?
a1:
1
3
5
4
?
2
?6
7
?9
?
10
12
8
11
?
a2:
3
2
1
12
6
7
10
11
8
?5
?4
?9
t1=5,t2=8。上述每一行中,两个星号间的部分为互换段。假定数组的下标从?1
开始,互换后有:
?
a1:
1
3
5
4
?
6
7
10
11
?
10
12
8
11
?
a2:
3
2
1
12
2
6
?7
?9
?
?8
?5
?4
?9
然后,将数字
6,7
对应的项标记为
0,星号内数字
2,9,10,11
对应的项标记为
1,并且按顺序对
应关系为:10<->2,11<->9。于是,将
a1[9]=10
替换为
a1[9]=2,将
a2[2]=2
替换为
a2[2]=10,
类似再做第
2
组替换。这样处理后,就得到了两个新个体:
?
a1:
1
?3
5
?4?????
6
7
10
11????
2
12
?8
?9
?
a2:
3
10
1
12
?2
6
?7???????
9??
8
?5
?4
?11
(3)输出两个新个体的编码。
程序:
?
program
ex502;
?
type
arr1=array[1..20]
of
integer;
?
var
a1,a2,kz1,kz2:arr1;
n,k,t1,t2:integer;
function
?rand1(k:integer):integer;
?
var
t:integer;
?
begin
t:=0;
while
(t<2)
or(t>k)
do
t:=random(k+1)-2;
rand1:=t;
end;
?
procedure
read1(var
a:arr1;m:integer);
{读入数组元素?a[1]至?a[m],a[0]=0,略。}
?
procedure
wrt1(var
a:arr1;m:integer);
{输出数组元素?a[1]至?a[m],略。}
procedure
cross(var
a1,a2:arr1;t1,
t2,n:integer);由收集
(?http:?/??/?www."
\t
"_blank?)
?
var
i,j,t,kj:integer;
begin
for
i:=t1
to
t2
do
begin
t:=a1[i];???
①??
;
?
end;
?
for
i:=1
to
n
do
?
if
(it2)
then
begin
kz1[i]:=-1;kz2[i]:=-1;
?
end
else
begin????
②??
;??
end;
?
for
i:=t1
to
t2
do
for
j:=t1
to
t2
do
if(a1[i]=a2[j])
then
begin????
③??
;??
break;
?end;
?
for
i:=t1
to
t2
do
if(kz1[i]=1)
then
begin
for
j:=t1
to
t2
do
if(kz2[j]=1)
then
begin
kj:=j;
break;
end;
?
for
j:=1
to
n
do
if???
④?
then
?
begin
a1[j]:=a2[kj];break;
end;
?
for
j:=1
to
n
do
if??
⑤?
then
?
begin
a2[j]:=a1[i];
break;
end;
?
kz1[i]:=0;kz2[kj]:=0;
?
end;
end;
begin
writeln('input
(n>5):');
?
readln(n);
?
writeln('input
array
1:');
?read1(a1,n);
writeln('input
array
2:');
?read1(a2,n);
?
t1:=rand1(n-1);
?
repeat
?
t2:=rand1(n-1);
until(t1<>t2);
if(t1>t2)
then
begin
k:=t1;
t1:=t2;
t2:=k;
end;
?
⑥??
?;
?
wrt1(a1,n);
wrt1(a2,n);
?
end.NOIP2008年提高组(Pascal语言)参考答案与评分标准
一、单项选择题:(每题1.5分)
1.
C
2.
A
3.
B
4.
C
5.
B
6.
D
7.
D
8.
E
9.
B
10.
C
二、
不定项选择题
(共10题,每题1.5分,共计15分。每题正确答案的个数大于或等于1。多选或少选均不得分)。
11.
ABD
12.
AC
13.
BC
14.
B
15.
ABC
16.
ABD
17.
BCD
18.
ABC
19.
ACD
20.
ABCD
三、问题求解:(共2题,每题5分,共计10分)
1.7
2.3060
四、阅读程序写结果(共4题,每题8分,共计32分)
1.
23
(信心题)
2.
1,3,2
(简单递归)
3.
132/213/231/312/321/
(全排列)
4.
defghijxyzabc/hfizxjaybcccc
(字符串替换)
五.完善程序
(前6空,每空3分,后5空,每空2分,共28分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1.
①
a[left]
②
a[j]
<
value
(或a[j]
<=
value)
③
a[i]
>
value
(或a[i]
>=
value)
④
a[i]
:=
value;
⑤
i,right,n
⑥
FindKth(left,
i,
n)
2.
①
inc(j);
(或者j
:=
j+1;)
②
a[i,j]
>
k
③
a[i,j]
<
k
④
answerx
:=
i;
⑤
answery
:=
j;
1
1初赛试题
第
全
学奥林匹克联赛初赛试题
(提高组
Pascal语
小时完成)
●全部试题答案均要求写在答卷纸上,写在试卷纸上律无效
单项选择题(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案)
项
)不是CPU的组成部分
控制
板
算术逻
系数据库
放在数据库中的数据
叉树
希
树
维表
在下列各项中,只有(
算机存储容
用单位
的含
一进制转换码
美国信息交换标准代
C.数字的二进制编
计算机可处理字符
用字符的二进制编码
表达式
)的值是
判断整数a等于0或b等于0或c等
确的条件表
地面上有标号为
3根约
柱上放
径相
有孔的圆盘,从上
次编号为
的部分盘子经过B柱移入C柱
以在B柱上暂存。如果B柱
操作记录为:“进,进
到上的盘子的编号为
初赛试题
进制数17.5625对应的8进制数是()
前4个答案都不对
欧拉图G是指可以构成
图,且图
条边恰好在这个闭回路上出现一次(即一笔
成)。在以下各个描述
是欧拉图的是()
A.图G中没有度为奇数的顶点
次的闭路径)
包含欧拉闭迹的图(欧拉迹是指通过图中每边恰好一次的路径
存在一条回路,通过每个顶点恰好一次
本身为闭迹的图
无法靠自身的控制终止的循环称为“死循环”,例如,在
(
”),”就
死循环
将无休止地打
关于死循环的说法中,只有(
是正确的
A.不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环,因而
任何编译系统都不做死循环检验
死循环
法错误,既然编译系统能检査各
检查出死循环
D.死循环与多进
现的“死锁”差不多,而死锁是可以检测的,因而,死循环也
检测
死循
等到发生时做现场处理,没有
积极的手段
不定项选择题(共10题,每题1.5分,共计15分。每题正确答案的个数大于或等
多选
或少选均不得分)
11.设A=B
辑运算表达式值为真的有()
C.A∧(
BVCVD)
(A∧(DC)∧B
题
读做P蕴涵Q,其
两个独立的命题
命题P成立而命题Q不成立
命题“
的值为
情况均为
命题“P→Q”等价的逻辑关系式
C.(1
000110
初赛试题
结点的二叉树的先根遍历
(数字为结点的编
后根遍
是
根遍
61
15.冗余数据
其他数据
数据,例如,数据库中已存放了学生的数学、语文和英
的总分,则总分就可以看作冗余数
余数据
成数据的不一致
4个数据如果
操作错误使总分不等
关于冗余数据的说法
确的是
A.应该在数据
B.与用高级语言编写的数据处理系统相
关系数据库编写的系统更容易消除冗余数据
提高査询效率,在数据库中可以适当保留一些冗余数据,但更新时要做相容性检验
D.做相容性检验会降低效率,可以不理睬数据库
余数据
16.在下列各软件中,属
赛(复赛)推荐使用的语言环境有
断电之后仍能保存数据
关于计算机语言的说氵
确的有(
级语言比汇编语言更高级,是因为它的程序的运行效率更
现,机
历史舞
级语言程序比汇编语言程序更容易从一种计算机移植到另
机上
程的高级计算机语
算法复杂性的说氵
确的有(
是指它在某台计算机上具体实现时的运行田
是指
算法的一种或儿种主要的运算,运算的次数与问题的规
数关
就意味着在解决该问题时
有多项式时间复杂度的算
但这一点还没
实,也没有被否定
题女
相同的结论
近20年来,许多
专家都大力推崇递归算法,认为它是解决较复杂问题的强有力的
列关于递归算法的说法第十四届全国青少年信息学奥林匹克联赛初赛试题
(
提高组
Pascal
语言
二小时完成
)
●
●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效
●●
一、
单项选择题
(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案)。
1.
在以下各项中,(
)不是操作系统软件。
A.
Solaris
B.
Linux
C.
Sybase
D.
Windows
Vista
E.
Symbian
2.微型计算机中,控制器的基本功能是(
)。
A.
控制机器各个部件协调工作
B.
实现算术运算和逻辑运算
C.
存储各种控制信息
D.
获取外部信息
E.
存放程序和数据
3.
设字符串S=”Olympic”,S的非空子串的数目是(
)。
A.
29
B.
28
C.
16
D.
17
E.
7
4.完全二叉树共有2
N-1个结点,则它的叶节点数是(
)。
A.
N-1
B.
2
N
C.
N
D.
2N-1
E.
N/2
5.将数组{8,
23,
4,
16,
77,
-5,
53,
100}中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换(
)次。
A.
4
B.
5
C.
6
D.
7
E.
8
6.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,c,f,e,a,则栈S的容量至少应该是(
)。
A.
6
B.
5
C.
4
D.
3
E.
2
7.
与十进制数28.5625相等的四进制数是(
)。
A.
123.21
B.
131.22
C.
130.22
D.
130.21
E.
130.20
8.
递归过程或函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。
A.
队列
B.
多维数组
C.
线性表
D.
链表
E.
栈
9.
TCP/IP是一组构成互联网基础的网络协议,字面上包括两组协议:传输控制协议(TCP)和网际协议(IP)。TCP/IP
协议把Internet网络系统描述成具有四个层次功能的网络模型,其中提供源节点和目的节点之间的信息传输服务,包括寻址和路由器选择等功能的是()。
A.
链路层
B.网络层
C.
传输层
D.
应用层
E.会话层
10.
对有序数组{5,
13,
19,
21,
37,
56,
64,
75,
88,
92,
100}进行二分查找,等概率的情况下查找成功的平均查找长度(平均比较次数)是(
)。
A.
35/11
B.
34/11
C.
33/11
D.
32/11
E.
34/10
二、
不定项选择题
(共10题,每题1.5分,共计15分。每题正确答案的个数大于或等于1。多选或少选均不得分)。
11.
在下列关于图灵奖的说法中,正确的有(
)。
A.
图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业作出重要贡献的个人
B.
图灵奖有“计算机界诺贝尔奖”之称
C.
迄今为止,还没有华裔计算机科学家获此殊荣
D.
图灵奖的名称取自计算机科学的先驱、英国科学家阿兰·图灵
12.计算机在工作过程中,若突然停电,(
)中的信息不会丢失。
A.
硬盘
B.
CPU
C.ROM
D.
RAM
13.
设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的有(
)。
A.
(A∧B)∨(C∧D∨A)
B.
((A∧B)∨C)∧D
C.
(B∨C∨D)∨D∧A
D.
A∧(D∨C)∧B
14.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享。下列网站中,(
)是典型的Web2.0应用。
A.
Sina
B.
Flickr
C.
Yahoo
D.
Google
15.
(2008)10
+
(5B)16的结果是(
)。
A.
(833)16
B.
(2099)10
C.
(4063)8
D.
(100001100011)2
16.
二叉树T,已知其先根遍历是1
2
4
3
5
7
6(数字为结点的编号,以下同),后根遍历是4
2
7
5
6
3
1,则该二叉树的可能的中根遍历是(
)。
A.
4
2
1
7
5
3
6
B.
2
4
1
7
5
3
6
C.
4
2
1
7
5
6
3
D.
2
4
1
5
7
3
6
17.
面向对象程序设计(Object-Oriented
Programming)是一种程序设计的方法论,它将对象作为程序的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。下面关于面向对象程序设计的说法中,正确的是(
)。
A.
面向对象程序设计通常采用自顶向下设计方法进行设计。
B.
面向对象程序设计方法具有继承性(inheritance)、封装性(encapsulation)、多态性(polymorphism)等几大特点。
C.
支持面向对象特性的语言称为面向对象的编程语言,目前较为流行的有C++、JAVA、C#等。
D.
面向对象的程序设计的雏形来自于Simula语言,后来在SmallTalk语言的完善和标准化的过程中得到更多的扩展和对以前思想的重新注解。至今,SmallTalk语言仍然被视为面向对象语言的基础。
18.
设T是一棵有n个顶点的树,下列说法正确的是(
)。
A.
T是连通的、无环的
B.
T是连通的,有n-1条边
C.
T是无环的,有n-1条边
D.
以上都不对
19.
NOIP竞赛推荐使用的语言环境有(
)。
A.
Dev-C++
B.
Visual
C++
C.
free
pascal
D.
Lazarus
20.
在下列防火墙(firewall)的说法中,正确的有(
)。
A.
防火墙是一项协助确保信息安全的设备,其会依照特定的规则,允许或是限制数据通过
B.
防火墙可能是一台专属的硬件或是安装在一般硬件上的一套软件
C.
网络层防火墙可以视为一种
IP
数据包过滤器,只允许符合特定规则的数据包通过,其余的一概禁止穿越防火墙
D.
应用层防火墙是在
TCP/IP的“应用层”上工作,可以拦截进出某应用程序的所有数据包
三.问题求解(共2题,每题5分,共计10分)
1.有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,则城市1到城市6的最短距离为_____________。
城市1
城市2
城市3
城市4
城市5
城市6
城市1
0
2
3
1
12
15
城市2
2
0
2
5
3
12
城市3
3
2
0
3
6
5
城市4
1
5
3
0
7
9
城市5
12
3
6
7
0
2
城市6
15
12
5
9
2
0
2.书架上有21本书,编号从1到21,从其中选4本,其中每两本的编号都不相邻的选法一共有______种。
四.阅读程序写结果(共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[i]);
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.
输入:2
1
3
输出:__________
3.procedure
f(a,b,c:integer);
begin
write(a,
b,
c,
'/');
if
(a
=
3)
and
(b
=
2)
and
(c
=
1)
then
exit;
if
bthen
f(a,c,b)
else
if
athen
if
athen
f(c,a,b)
else
f(b,c,a);
end;
var
a,b,c:integer;
begin
read(a,
b,
c);
f(a,b,c);
end.
输入:
1
3
2
输出:
________________________________________
4.
var
s:string;
i,j,len,k:integer;
begin
read(s);
len:=length(s);
for
i:=1
to
len
do
if
(ord(s[i])
>=
ord('A'))
and
(ord(s[i])
<=
ord('Z'))
then
s[i]
:=
chr(ord(s[i])
-
ord('A')
+
ord('a'));
for
i:=1
to
len
do
if
(ord(s[i])then
s[i]:=
chr(ord(s[i])+3)
else
s[i]:=
chr(ord(s[i])-23);
write(s);
write('/');
for
j:=1
to
3
do
begin
i:=1;
while
i<=len-j
do
begin
s[i]:=s[i+j];
i:=i+j;
end;
end;
writeln(s);
end.
输入:ABCDEFGuvwxyz
输出:___________________________________________
五.完善程序
(前6空,每空3分,后5空,每空2分,共28分)
1.(找第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(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
ido
begin
while
(iand
(
②
)
do
dec(j);
if
ithen
begin
a[i]
:=
a[j];
inc(i);
end
else
break;
while
(iand
(
③
)
do
inc(i);
if
ithen
begin
a[j]
:=
a[i];
dec(j);
end
else
break;
end;
④
if
ithen
begin
inc(i);
exit(FindKth(
⑤
));end;
if
i>n
then
begin
dec(i);
exit(
⑥
);
end;
exit(i);
end;
var
i:integer;
begin
randomize;
ans
:=
-1;
m:=5;
for
i:=1
to
m
do
read(a[i]);
read(n);
ans:=
FindKth(1,m,n);
writeln(a[ans]);
end.
2.(矩阵中的数字)有一个n
n(1<=n<=5000)的矩阵a,
对于1<=i
<
n,1<=j<=n,
a[i,j]
<
a[i
+
1,j]
a[j,i]
<
a[j,i+1]。即矩阵中左右相邻的两个元素,右边的元素一定比左边的大。上下相邻的两个元素,下面的元素一定比上面的大。给定矩阵a中的一个数字k,找出k所在的行列(注意:输入数据保证矩阵中的数各不相同)。
var
n,k,answerx,answery:integer;
a:array[1..5000,1..5000]
of
integer;
procedure
FindKPosition;
var
i,j:integer;
begin
i:=n;
j:=n;
while
j>0
do
begin
if
a[n,j]
<
k
then
break;
dec(j);
end;
①
while
a[i,j]<>k
do
begin
while
(
②
)
and
(i>1)
do
dec(i);
while
(
③
)
and
(j<=n)
do
inc(j);
end;
④
⑤
end;
var
i,j:integer;
begin
read(n);
for
i:=1
to
n
do
for
j:=1
to
n
do
read(a[i,j]);
read(k);
FindKPosition;
writeln(answerx,
'
',
answery);
end.第五届全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛(高中组)答案
一、选择一个正确答案代码(A/B/C/D),填入每题的括号内
(每题1.5分,多选无分,共30分)
题号
1
2
3
4
5
6
7
8
9
10
选择
B
B
C
C
C
C
B
C
B
A
题号
11
12
13
14
15
16
17
18
19
20
选择
B
D
D
C
C
D
B
D
C
A
二.回答问题:
(共10分)
Ln=n
(n
+
1)
/
2
+
1
Zn=(n-1)
(2n-1)
+
2n
或
2n2-n+1
三.阅读程序,并写出程序的正确运行结果:
(每题15分,共30分)
1.本题的运行结果是:
970
2.(1)比较运算的次数为:
n
(n-1)
(2)比较运算的次数为:
n+(n-1)+(n-2)+
…
+1
=
n
(n+1)/2
或
(n2+n)/2
(3)比较运算的次数为:
2
n/2+2
n/4+2
n/8+2
n/16…
=
2n
(1/2+1/4+1/8+…)≈2n
四.根据题意,将程序补充完整(共30分)
1.
①
sp1<
=sp2
②
p:=p+1
③
g[sp1,j]<>
0
④
sp2:=sp2+1
⑤
sp2:=sp1+1
⑥
k=g[i,2]
⑦
j:=1
2.
①
a[i]:=i
②
s
downto
1
或
1
to
s
③
a[j-1]
>
a[j]
④
(a[i1]>a[j-1])
and
(a[i1]⑤
a[i1]>a[k]
―
1
―第四届全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛(高中组)答案
一.选择填空:
1
2
3
4
5
6
7
8
9
10
C
C
D
A
B
B
A
B
E
D
A
D
二.问题求解:
1、当K=
3
,a1,a2,…,ak为
a1
=
1,a2
=
-3,a3
=
3
时,……
2、此二叉树为:
3、表示该无向图的邻接矩阵为:
三、阅读程序写出程序的正确运行结果:
1.
max=77
2.
S=1024
3.
S=252
4.
jamp=5
maxswap=2
i=6
j=7
四、根据题意,补充完善以下程序:
①
st12
<=
st11
②
t=0
③
s=0
④
st12+1
⑤
str1[st12,i+j]
⑥
j+1
to
n
F
C
A
B
D
E
G
H
I
1
2
3
4
5
6
7
1
0
1
0
0
0
0
0
2
1
0
1
1
0
0
0
3
0
1
0
1
1
0
0
4
0
1
1
0
1
1
1
5
0
0
1
1
0
0
1
6
0
0
0
1
0
0
1
7
0
0
0
1
1
1
0
A
=
·1·第三届全国青少年信息学(计算机)奥林匹克竞赛
分区联赛初赛(高中组)答案
一.基础部份
1.
应用
系统
GBZ.DBF
2.
执行的是,屏幕显示当前计算机的时间
3.G-→(71)10
b
-→(98)10
t
-→(116)10
4.
14240
5.
1
1
0
0
1
0
0
0
,
1
0
1
1
0
1
0
0
6.
①
可以找到这样的道路
②
只去一次的通路不存在,因为要经过D、E、F、B四点城市,必须从A点或C点出发,而从A或C只能到达其中3个点(每个点只去一次)。
7.
①
前缀形式为:
+A*B/
CD
;
后缀形式为:
ABCD/
*+
;
前缀形式为:
+-A*CD∧BE
;
后缀形式为:
ACD*-BE∧+
;
②
中缀形式为:
(△A)+B*(△C)
;
后缀形式为:
A△BC△+*
;
8.
①
可以运动出6种不同状态的三角形,表达式如下:
<1>
b
<2>
b2
(bb)
或
aba
<3>
b3
(bbb)
或
(aa)
<4>
a
<5>
b2a
(bba)
或
ab
<6>
ba
或
ab2
(abb)
②
不符合交换律,但符合结合律
③
(1)
a
-1
=
a
(2)
(ab)-1
=b2a=ab
(3)
((aa)
a)-1
=a
(4)
b
-1
=b2
二.根据题目要求,补充完善以下伪代码程序
1.
①
a[0,1]:=1
②
s:=s+1
③
s>0
④
a[j,1]:=i
⑤
s
⑥
b[k]=a[k,2]
⑦
k+1
to
j
⑧
s:=s
a[i,1]
2.
①
(s1+s2+s3)/2
②
p[n+i]:=p[i]
③
i+3
to
i+n-2
④
smax⑤
p[i+1]
3.
①
s1<
=n
②
s1:=s1+s1
③
jj:=jj-1
④
eq(gw)
⑤
gw.y:=g1[i1].y
2
⑥
g1[j]:=gw
⑦
b[g1[i].z]:=b[g1[i].z]+1
⑧
b[i]<>0
或
b[i]>0
―
1
―NOIP2007年提高组(Pascal语言)参考答案与评分标准
一、单项选择题:(每题1.5分)
1.
D
2.
E
3.
D
4.
B
5.
A
6.
B
7.
D
8.
B
9.
D
10.
A
二、
不定项选择题
(共10题,每题1.5分,共计15分。每题正确答案的个数大于或等于1。多选或少选均不得分)。
11.
ABC
12.
AD
13.
ABD
14.
ABD
15.
BC
16.
ABD
17.
AB
18.
CD
19.
BC
20.
AC
三、问题求解:(共2题,每题5分,共计10分)
1.350
2.289
四、阅读程序写结果(共4题,每题8分,共计32分)
1
129,43
2
No.1:3,6
No.2:3,6
3
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
4
No.1:
XTORSEAAMPLE
No.2:
AAEELMOPRSTX
五.完善程序
(前5空,每空2分,后6空,每空3分,共28分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1
①
bound
2
②
exit
③
j:=0
④
(j
mod
b-(b
div
2))=0
⑤
downto
1
2
①
x[i-2]
(m-1)
②
j+x[i-1]
k
③
j+x[i-1]
k
(同2)
④
r-1
⑤
x[i-1]+1
⑥
backtrace(i+1,r)提高组(PASCAL
语言)参考答案与评分标准
由整理收集
(?http:?/??/?www.?)
?
?一、单项选择题:(每题
1.5
分)
?1.
E?
2.
C
3.
D?
4.
E?
5.
C??
6.
E
7.
C??
8.
B??
9.
A?
10.
B
?
?
二、不定项选择题:(每题
1.5
分)由收集
(?http:?/??/?www."
\t
"_blank?)
?11.
ABC???
12.
AB????
13.
C??
14.
BC???
15.
ABCD
16.
AD????
17.
CD????
18.AB??
19.
BD???
20.(满分,空白
0
分)
??
三、问题求解:(每题
?5
分)
1.
401?
2.
9!?
(或
362880)
??
四、阅读程序写结果
1.
-13,57
(对
1
个数给
4
分,无逗号扣
1
分)
?
2.
6?
28?
496?
8128?
33550336由收集
(?http:?/??/?www."
\t
"_blank?)
(前
2
个对
1
个数给
1
分,后
3
个对
1
个数给
2
分)
?
3.
11
4.
6?
2?
5?
4?
3?
7?
9?
9?
7?
3?
4?
5?
2?
6(数字之间无空格扣
2
分)
??
五、完善程序(前
5
空,每空
2
分,后
6
空,每空
3
分)
1.①
j=k
(或k=j)
②
p:=1
to
k
③
perm2(j+1)
④
a[j]:=a[i];a[i]:=t
⑤
perm2(1)
2.①
a1[i]:=a2[i];a2[i]:=t
②
kz1[i]:=1;kz2[i]:=1;
③
kz1[i]:=0;kz2[j]:=0;
④
(a1[j]=a1[i])and(kz1[j]=-1)
⑤
(a2[j]=a2[kj])and(kz2[j]=-1)收集
(?http:?/??/?www."
\t
"_blank?)
⑥
cross(a1,a2,t1,t2,n)第十一届全国青少年信息学奥林匹克联赛初赛试题
(
提高组pascal
语言二小时完成)
●●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一、单项选择题(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案.)。
1.
字符串“ababacbab”和字符串“abcba”的最长公共子串是(
)。
A.
abcba
B.
cba
C.
abc
D.
ab
E.
bcba
2.
设全集I
=
{a,
b,
c,
d,
e,
f,
g,
h},集合B
A
=
{a,
b,
c,
d,
e,
f},
C
A=
{c,
d,
e},
~B
A=
{a,
d},那么集合C
B
A为(
)。
A.
{c,
e}
B.
{d,
e}
C.
{e}
D.
{c,
d,
e}
E.
{d,
f}
3.
以下二进制数的值与十进制数23.456
的值最接近的是(
)。
A.
10111.0101
B.
11011.1111
C.
11011.0111
D.
10111.0111
E.
10111.1111
4.
完全二叉树的结点个数为4
N
+
3,则它的叶结点个数为(
)。
A.
2
N
B.
2
N
-
1
C.
2
N
+
1
D.
2
N
-
2
E.
2
N
+
2
5.
平面上有五个点A(5,
3),
B(3,
5),
C(2,
1),
D(3,
3),
E(5,
1)。以这五点作为完全图G
的顶点,
每两点之间的直线距离是图G
中对应边的权值。图G
的最小生成树中的所有边的权值
综合为(
)。
A.
8
B.
7+
5
C.
9
D.
6+
5
E.
4+2
2
+
5
6.
下列设备中没有计算功能的是(
)。
A.
笔记本电脑B.
掌上电脑C.
智能手机
D.
电子计算器E.
液晶显示器
7.
Intel的首颗64
位处理器是(
)。
A.
8088
B.
8086
C.
80386
D.
80486
E.
Pentium
8.
常见的邮件传输服务器使用(
)协议发送邮件。
A.
HTTP
B.
SMTP
C.
TCP
D.
FTP
E.
POP3
9.
不能在Linux
上使用的网页浏览器是(
)。
A.
Internet
Explore
B.
Netscape
C.
Opera
D.
Firefox
E.
Mozilla
10.
一位艺术史学家有20000
幅1024
768
的真彩色图像,如果将这些图像以位图形式保存
在CD
光盘上(一张CD
光盘的容量按600M计算),大约需要(
)张CD光盘。
A.
1
B.
10
C.
100
D.
1000
E.
10000
二、不定项选择题(共10题,每题1.5分,共计15分。多选或少选均不得分)。
11.
设A
=
true,B
=
false,C
=
false,D
=
true,以下逻辑运算表达式值为真的有(
)。
A.
(A
B
∧
)∨(C
D
∧
)
B.
((A
B
∧
)
C
∨
)
D
∧
C.
A∧((B
C
∨
)
D
∨
)
D.
(A∧(B
C
∨
))
D
∨
E.
(A
B
∨
)∧(C
D
∨
)
12.
(3725)8
+
(B)16的运算结果是(
)。
A.
(3736)8
B.
(2016)10
C.
(11111100000)2
D.
(3006)10
E.
(7E0)16
13.
二叉树T的宽度优先遍历序列为A
B
C
D
E
F
G
H
I,已知A是C的父结点,D
是G
的
父结点,F
是I
的父结点,树中所有结点的最大深度为3(根结点深度设为0),可知E
的父结点可能是(
)。
A.
A
B.
B
C.
C
D.
D
E.
F
14.
设栈S的初始状态为空,元素a,
b,
c,
d,
e,
f,
g依次入栈,以下出栈序列不可能出现的有
(
)。
A.
a,
b,
c,
e,
d,
f,
g
B.
b,
c,
a,
f,
e,
g,
d
C.
a,
e,
c,
b,
d,
f,
g
D.
d,
c,
f,
e,
b,
a,
g
E.
g,
e,
f,
d,
c,
b,
a
15.
下列外设接口中可以通过无线连接的方式连接设备的是(
)。
A.
USB
2.0
高速版B.
红外C.
蓝牙D.
串口E.
IEEE
802.11g
无线网卡
16.
处理器A
每秒处理的指令数是处理器B
的2
倍。某一特定程序P
分别编译为处理器A
和处理器B
的指令,编译结果处理器A
的指令数是处理器B
的4
倍。已知程序P
的算
法时间复杂度为O(n2),如果处理器A执行程序P时能在一小时内完成的输入规模为n,
则处理器B执行程序P时能在一小时内完成的输入规模为(
)。
A.
4
n
B.
2
n
C.
n
D.
n
/
2
E.
n
/
4
17.
以下哪个(些)不是计算机的输出设备(
)。
A.
鼠标B.
显示器C.
键盘D.
扫描仪E.
绘图仪
18.
以下断电之后将不能保存数据的有(
)。
A.
硬盘B.
寄存器C.
显存D.
内存E.
高速缓存
19.
下列活动中属于信息学奥赛系列活动的是(
)。
A.
NOIP
B.
NOI
C.
IOI
D.
冬令营E.
国家队选拔赛
20.
下列关于高级语言的说法正确的有(
)。
A.
Ada
是历史上的第一个高级语言
B.
Pascal和C都是编译执行的高级语言
C.
C++是历史上的第一个支持面向对象的语言
D.
编译器将高级语言程序转变为目标代码
E.
高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上
三.问题求解(请在空格处填上答案,每空5分,共计10分)
1.
将数组{32,
74,
25,
53,
28,
43,
86,
47}中的元素按从小到大的顺序排列,每次可以交换任
意两个元素,最少需要交换次。
2.
取火柴游戏的规则如下:一堆火柴有N根,A、B两人轮流取出。每人每次可以取1
根或
2
根,最先没有火柴可取的人为败方,另一方为胜方。如果先取者有必胜策略则记为1,
先取者没有必胜策略记为0。当N
分别为100,200,300,400,500
时,先取者有无必
胜策略的标记顺序为(回答应为一个由0
和/或1
组成的字符串)。
四.阅读程序(共4题,每题8分,共计32
分)
1.
var
a,
b,
c,
p,
q
:
integer;
r
:
array[0..2]
of
integer;
begin
read(a,
b,
c);
p
:=
a
div
b
div
c;
q
:=
b
-
c
+
a
+
p;
r[0]
:=
a
p
div
q
q;
r[1]
:=
r[0]
(r[0]
-
300);
if
(3
q
-
p
mod
3
<=
r[0])
and
(r[2]
=
r[2])
then
r[1]
:=
r[r[0]
div
p
mod
2]
else
r[1]
:=
q
mod
p;
writeln(r[0]
-
r[1]);
end.
输入:100
7
3
输出:
2.
var
a
:
array
[1..50]
of
integer;
n,
i,
sum
:
integer;
procedure
work(p,
r:
integer);
var
i,
j,
temp
:
integer;
begin
if
p
<
r
then
begin
i
:=
p
-
1;
for
j
:=
p
to
r
-
1
do
if
a[j]
>=
a[r]
then
begin
inc(i);
temp
:=
a[i];
a[i]
:=
a[j];
a[j]
:=
temp;
end;
temp
:=
a[i
+
1];
a[i
+
1]
:=
a[r];
a[r]
:=
temp;
work(p,
i);
work(i
+
2,
r);
end;
end;
begin
read(n);
for
i
:=
1
to
n
do
read(a[i]);
work(1,
n);
for
i
:=
1
to
n
-
1
do
sum
:=
sum
+
abs(a[i
+
1]
-
a[i]);
writeln(sum);
end.
输入:10
23
435
12
345
3123
43
456
12
32
-100
输出:
3.
var
str
:
string;
len,
i,
j
:
integer;
nchr
:
array
[0..25]
of
integer;
mmin
:
char;
begin
mmin
:=
'z';
readln(str);
len
:=
length(str);
i
:=
len;
while
i
>=
2
do
begin
if
str[i
-
1]
<
str[i]
then
break;
dec(i);
end;
if
i
=
1
then
begin
writeln('No
result!');
exit;
end;
for
j
:=
1
to
i
-
2
do
write(str[j]);
fillchar(nchr,
sizeof(nchr),
0);
for
j
:=
i
to
len
do
begin
if
(str[j]
>
str[i
-
1])
and
(str[j]
<
mmin)
then
mmin
:=
str[j];
inc(nchr[ord(str[j])
-
ord('a')]);
end;
dec(nchr[ord(mmin)
-
ord('a')]);
inc(nchr[ord(str[i
-
1])
-
ord('a')]);
write(mmin);
for
i
:=
0
to
25
do
for
j
:=
1
to
nchr[i]
do
write(chr(i
+
ord('a')));
writeln;
end.
输入:zzyzcccbbbaaa
输出:
4.
var
n
:
longint;
function
g(k
:
longint)
:
longint;
begin
if
k
<=
1
then
g
:=
k
else
g
:=
(2002
g(k
-
1)
+
2003
g(k
-
2))
mod
2005;
end;
begin
read(n);
writeln(g(n));
end.
输入:2005
输出:
五.完善程序(前5空,每空2分,后6空,每空3分,共28分)
1.木材加工
题目描述:
木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有
剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段越长越好,你的任务
是计算能够得到的小段木头的最大长度。
木头长度的单位是cm。原木的长度都是正整数,我们要求切割得到的小段木头的长度
也是正整数。
输入:
第一行是两个正整数N和K(1
≤
N
≤
10000,1
≤
K
≤
10000),N是原木的数目,
K是需要得到的小段的数目。
接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。
输出:
输出能够切割得到的小段的最大长度。如果连1cm长的小段都切不出来,输出”0”。
输入样例:
3
7
232
124
456
输出样例:
114
程序:
var
n,
k
:
integer;
len
:
array
[1..10000]
of
integer;
i,
left,
right,
mid
:
integer;
function
isok(t
:
integer)
:
boolean;
var
num,
i
:
integer;
begin
num
:=
0;
for
i
:=
1
to
n
do
begin
if
num
>=
k
then
break;
num
:=
①
;
end;
if
②
then
isok
:=
true
else
isok
:=
false;
end;
begin
readln(n,
k);
right
:=
0;
for
i
:=
1
to
n
do
begin
readln(len[i]);
if
right
<
len[i]
then
right
:=
len[i];
end;
inc(right);
③
;
while
④
<
right
do
begin
mid
:=
(left
+
right)
div
2;
if
⑤
then
right
:=
mid
else
left
:=
mid;
end;
writeln(left);
end.
2.N叉树
题目描述:
我们都了解二叉树的先根遍历,中根遍历和后根遍历。当知道先根遍历的结果和中根遍
历结果的时候,我们可以唯一的确定二叉树;同样的,如果知道了后根遍历的结果和中根遍
历结果,二叉树也是唯一确定的。但是如果只知道先根遍历和后根遍历的结果,二叉树就不
是唯一的了。但是我们可以计算满足条件的不同二叉树一共有多少个。这不是一个很困难的
问题,稍微复杂一点,我们把这个问题推广到N叉树。
我们用小写英文字母来表示N
叉树的结点,不同的结点用不同的字母表示。比如,对
于4叉树,如果先根遍历的结果是abdefgc,后根遍历的结果是defgbca,那么我们可以
得到6个不同的4叉树(如下图)。
输入:
输入数据包括3行。
第一行是一个正整数N(2
≤
N
≤
20),表示我们要考虑N叉树。
第二行和第三行分别是两个字符串序列,分别表示先根遍历和后根遍历的结果。
输出:
输出不同的N叉树的数目。题目中给的数据保证得到的结果小于2
31
。
输入样例:
4
abdefgc
defgbca
输出样例:
6
程序:
var
str1,
str2
:
string;
N,
len
:
integer;
com
:
array[0..100,
0..100]
of
longint;
function
getcom(x,
y
:
integer)
:
longint;
begin
if
(y
=
0)
or
(x
=
y)
then
①
else
if
com[x][y]
<>
0
then
getcom
:=
com[x][y]
else
begin
com[x][y]
:=
getcom(x
-
1,
y)+
②
;
getcom
:=
com[x][y];
end;
end;
function
count(a,
b,
c
:
integer)
:
longint;
var
sum
:
longint;
k,
s,
t,
p
:
integer;
begin
sum
:=
1;
k
:=
0;
s
:=
a
+
1;
t
:=
c;
if
a
=
b
then
count
:=
1
else
begin
while
s
<=
b
do
begin
p
:=
t;
while
str1[s]
<>
str2[t]
do
inc(t);
sum
:=
sum
count(s,
s
+
t
-
p,
p);
s
:=
③
;
④
;
inc(k);
end;
count
:=
⑤
getcom(N,
k);
end;
end;
begin
readln(N);
readln(str1);
readln(str2);
len
:=
length(str1);
writeln(count(
⑥
));
end.
第十一届全国青少年信息学奥林匹克联赛初赛
提高组(P)参考答案
一.
单项选择题
(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案.)。
题号
1
2
3
4
5
6
7
8
9
10
选择
B
A
D
E
D
E
E
B
A
C
二.不定项选择题
(共10题,每题1.5分,共计15分。多选或少选均不得分)。
题号
11
12
13
14
15
16
17
18
19
20
选择
CDE
BCE
BC
CE
BCE
B
ACD
BCDE
ABCDE
BDE
三.问题求解(共2题,每题5分,共计10分)
1.
答:
5
2.
答:
11011
四.
阅读程序(共4题,每题8分,共计32分)
(1)程序的运行结果是:
-7452
(2)
程序的运行结果是:
3223
(3)程序的运行结果是:
zzzaaabbbcccy
(4)程序的运行结果是:
31
五.
完善程序
(前5空,每空2分,后6空,每空3分,共28分)
pascal语言
=================
1.
(1)
num
+
len[i]
div
t
(2)
num
>=
k
(3)
left
:=
0
(4)
left
+
1
(5)
not
isok(mid)
(或者
isok(mid)
=
false)
2.
(1)
getcom
:=
1
(2)
getcom(x
-
1,
y
-
1)
(3)
s
+
t
-
p
+
1
(4)
inc(t)
(或者t
:=
t
+
1)
(5)
sum
(6)
1,
len,
198
全国分区联赛
高中组(初赛)
第四届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题(高中组)
(
Pascal
语言
竞赛用时:2小时)
●●
全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效
●●
一.选择填空:
1、操作系统是一类重要的系统软件,下面几个软件中不属于操作系统的是
。
(A)MS-DOS
(B)UCDOS
(C)PASCAL
(D)WINDOWS
95
2、在计算机内部,用来传送、存储、加工处理的数据或指令(命令)都是以
形式进行的。
(A)十进制码
(B)智能拼音码
(C)二进制码
(D)五笔字型码
3、已知计算机C:\DOS下有一个正确的文件,当执行如下命令:
C:\>
FORMAT
A:
<回车>
得到的回答是bad
command
or
file
name提示信息,下面解释正确的是
。
(A)根目录中没有AUTOEXEC.BAT文件;
(B)在执行该命令前操作者没执行过PATH命令;
(C)C:\DOS中的文件有错
(D)由于AUTOEXEC.BAT或操作者最后执行过的PATH命令中缺少路径C:\DOS,或者根本没有执行过PATH命令。
4、将A盘上50个文件用:C:\>COPY
A:
.
命令复制到C盘的当前目录中。在复制到某一个文件时,由于读数据出错,屏幕显示:
Abort,
Retry,
Ignore,
Fail?
键入“I”后,继续复制没再出现过出错信息。最后复制的结果是_______。
(A)读数据出错的文件不正确,其他文件正确;
(B)读数据出错的文件不正确,其他文件也不正确;
(C)读数据出错的文件正确,其他文件不正确;
(D)复制的文件全正确;
5、表达式(4
MOD
(-3))与(-4
MOD
3)的值为:_______。
(A)-1,-1
(B)1,-1
(C)-1,1
(D)1,1
6、小张用十六进制,八进制和十进制写了如下一个等式:
52-19=33
式中三个数是各不相同进位制的数,试问52,19,33,分别为________。
(A)八进制,十进制,十六进制
(B)十进制,十六进制,八进制
(C)八进制,十六进制,十进制
(D)十进制,八进制,十六进制
7、某班有50名学生,每位学生发一张调查卡,上写a,
b,
c三本书的书名,将读过的书打√,结果统计数字如下:
只读a者8人;只读b者4人;只读c者3人;全部读过的有2人;
读过a,b两本书的有4人;读过a,c两本书的有2人;读过b,c两本书的有3人;
问:(1)读过a的人数是_____。
(2)一本书也没读过的人数是______。
(A)12人
(B)30人
(C)10人
(D)24人
(E)31人
8、下列if语句中,endif表示相应if的结束:
y=0
if
x<0
then
y=5
else
if
x<10
then
y=10
if
x<100
then
y=100
endif
else
y=200
endif
endif
试指出:当x=80时,运行的结果为______,x=5时结果为______。
(A)y=9
(B)y=5
(C)y=10
(D)y=100
(E)y=200
9、如果用一个字节来表示整数,最高位用作符号位,其他位表示数值。
例如:
0
0
0
0
0
0
0
1
↑符号位表示正
1
0
0
0
0
0
0
1
↑符号位表示负
①试问这种表示法的整数a的范围应是_______。
(A)-127≤a≤127
(B)-128≤a≤128
(C)-128≤a<128
(D)-128②在这样表示法中,以下_____说法是正确的。
(A)范围内的每一个数都只有唯一的格式
(B)范围内的每一个数都有两种格式
(C)范围内的一半数有两种格式
(D)范围内只有一个数有两种表示格式
10、设栈S的初始状态为空,现有5个元素组成的序列{1,2,3,4,5},对该序列在S栈上依次进行如下操作(从序列中的1开始,出栈后不再进栈):进栈,进栈,进栈,出栈,进栈,出栈,进栈,试问出栈的元素序列是________。
(A){5,4,3,2,1}
(B){2,1}
(C){2,3}
(D){3,4}
二、问题求解:
1、已知一个数列U1
,
U2
,
U3
,…
Un
,…
往往可以找到一个最小的k值和k个数a1
,
a2
,…,
ak
,使得数列从某项开始都满足:
un+k=a1un+k-1+a2un+k-2+…+akun
(A)
例如对斐波拉契数列1,1,2,3,5,…可以发现:当k=2,a1=1,a2=1时,从第3项起(即n≥1)都满足un+2=un+1+un。
试对数列13,23,33,…,n3,…求k和a1,a2,…,ak使得(A)成立。
2、给出一棵二叉树的中序遍历:DBGEACHFI与后序遍历:DGEBHIFCA画出此二叉树。
3、用邻接矩阵表示下面的无向图:
三、阅读程序写出程序的正确运行结果:
1.
program
exp1(input,output);
VAR
i,
s,
max:integer;
a
:array[1..10]
of
integer;
Begin
for
i:=1
to
10
do
read(a[i]);
max:=a[1];
s:=a[1];
for
i:=2
to
10
do
begin
if
s<0
then
s:=0;
s:=s+a[i];
if
s>max
then
max:=s
end;
writeln('max=',MAX)
End.
输入:8
9
-1
24
6
5
11
15
-28
9
输出:max=
2.
program
exp2(input,output);
CONST
N=10;
VAR
S,I:INTEGER;
FUNCTION
CO(I1:INTEGER):INTEGER;
VAR
J1,S1:INTEGER;
BEGIN
S1:=N;
FOR
J1:=(N-1)
DOWNTO
(N-I1+1)
DO
S1:=S1
J1
DIV
(N-J1+1);
CO:=S1;
END;
BEGIN
S:=N+1;
FOR
I:=2
TO
N
DO
S:=S+CO(I);
WRITELN('S=',S);
END.
3.Program
exp3(input,output);
VAR
I,J,S:INTEGER;
B
:ARRAY[0..5]
OF
INTEGER;
BEGIN
S:=1;
FOR
I:=1
TO
5
DO
B[I]:=I;
J:=1;
WHILE
J>0
DO
BEGIN
J:=5;
WHILE
(J>0)
AND
(B[J]=10+J-5)
DO
J:=J-1;
IF
J>0
THEN
BEGIN
S:=S+1;
B[J]:=B[J]+1;
FOR
i:=J+1
TO
5
DO
B[i]:=B[J]+i-J
END;
END;
WRITELN('S=',S);
END.
4.Program
EXP4(input,output);
const
n=4;
type
se=array[1..n
2]
of
char;
var
i,j,i1,j1,k,s,t,s1,L,swap:integer;
temp
:char;
a
:se;
Begin
for
i:=1
to
n
2
do
read(a[i]);
readln;
s:=0;
t:=0;
for
i:=1
to
n
2
do
if
a[i]='1'
then
s:=s+1
else
if
a[i]='0'
then
t:=t+1;
if
(s<>n)
or
(t<>n)
then
writeln('error')
else
begin
s1:=0;
for
i:=1
to
2
n-1
do
if
a[i]<>a[i+1]
then
s1:=s1+1;
writeln('jamp=',s1);
swap:=0;
for
i:=1
to
2
n-1
do
for
j:=i+1
to
2
n
do
if
a[i]<>a[j]
then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp;
s:=0;
for
L:=1
to
2
n-1
do
if
a[L]<>a[L+1]
then
s:=s+1;
if
s>swap
then
begin
swap:=s;
i1:=i;
j1:=j
end;
temp:=a[i];a
[i]:=a[j];
a[j]:=temp
end;
if
swap>0
then
writeln('maxswap=',swap-s1,'
i=',i1,'
j=',j1)
end
End.
输入:10101100
输出:
四、根据题意,补充完善以下程序:
1.
FBZ串问题。已知一个由0,1字符组成的长为2n的字符串。请按.以下规则将已给出的字符串分解成FBZ串:
1
若其中字符全为‘1’,则称其为‘B’串;
2
若其中字符全为‘0’,则称其为‘Z’串;
3
若不全为‘0’,同时也不全为‘1’,则称‘F’串。若此串为F串,则应将此串分解为2个长为2n-1的子串。
对分解后的子串,仍按以上规则继续分解,直到全部为B串或为Z串为止。
例如n=3时,给出0—1串为:‘10111001’
最后输出:FFFBZBFFBZFZB
问题:给出0,1串,分解成FBZ串。
程序如下:
Program
EXP5;
const
n=8;
var
i
,
j
,
st11
,
st12
,
st2
,
s
,
t
:
integer;
str1
:array[
1..n
2
,
1..n
]
of
char;
str2
:array[
1..40
]
of
char;
Begin
for
i:=1
to
n
2
do
for
j:=1
to
n
do
str1[
i
,
j
]:=‘
’;
st11:=1;
st12:=1;
st2:=0;
for
i:=1
to
n
do
read(str1[1,
i
]);
readln;
while
①
do
begin
s:=0;
t:=0;
for
i:=1
to
n
do
begin
if
str1[
st12
,
i
]=’1’
then
s:=s+1;
if
str1[
st12
,
i
]=’0’
then
t:=t+1;
end;
if
②
then
begin
st2:=st2+1;
str2[st2]:=’B’
end
else
if
③
then
begin
st2:=st2+1;
str[st2]:=’Z’
end
else
begin
st2:=st2+1;
str2[st2]:=’F’;
j:=(s+
t)
div
2;
for
s:=n
2-2
downto
④
do
for
t:=1
to
n
do
str1[s+2,t]:=str1[s,t];
st11:=st11+2;
for
i:=1
to
j
do
begin
str1[st12+1,
i
]:=str1[st12
,
i
];
str1[st12+2,
i
]:=
⑤
;
end;
for
i:=
⑥
do
begin
str1[st12+1,i]:=’
’;
str1[st12+2,i]:=’
’
end;
end;
st12:=st12+1;
end;
for
i:=1
to
st2
do
write(str2[i]);
writeln;
End.
表示
+
1
表示
-1
·2·第十届全国青少年信息学奥林匹克联赛初赛试题
(
提高组
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}
B.
{a,
b,
d,
e}
C.
{b,
d,
e}
D.
{b,
c,
d,
e}
E.
{d,
f,
g}
2、由3个a,5个b和2个c构成的所有字符串中,包含子串“abc”的共有(
)个。
A.
40320
B.
39600
C.
840
D.
780
E.
60
3、某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,出,进,进,进,出,出,进,出”。假设车辆入站的顺序为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
4、满二叉树的叶结点个数为N,则它的结点总数为(
)。
A.
N
B.
2
N
C.
2
N
–
1
D.
2
N
+
1
E.
2N
–
1
5、二叉树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
6、十进制数100.625等值于二进制数(
)。
A.
1001100.101
B.
1100100.101
C.
1100100.011
D.
1001100.11
E.
1001100.01
7、下面哪个部件对于个人桌面电脑的正常运行不是必需的(
)。
A.
CPU
B.
图形卡(显卡)
C.
光驱
D.
主板
E.
内存
8、下列哪个网络上常用的名字缩写是错误的(
)。
B.
WWW(World
Wide
Web)
C.
URL(Uniform
Resource
Locator)
D.
HTTP(Hypertext
Transfer
Protocol)
E.
FTP(Fast
Transfer
Protocol)
F.
TCP(Transfer
Control
Protocol)。
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
E.
(2036)10
14、下列哪个(些)不是数据库软件的名称(
)。
A.
MyS
QL
B.
SQL
Server
C.
Oracle
D.
Outlook
E.
Foxpro
15、下列哪个(些)不是计算机的存储设备(
)。
A.
文件管理器
B.
内存
C.
显卡
D.
硬盘
E.
U盘
16、下列哪个(些)软件属于操作系统软件(
)。
A.
Microsoft
Word
B.
Windows
XP
C.
Foxmail
D.
金山影霸
E.
Red
Hat
Linux
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
C3
C4
C5
C6
C7
课程名称
高等数学
程序设计语言
离散数学
数据结构
编译技术
操作系统
普通物理
计算机原理
先修课程
C0,
C1
C1,
C2
C3
C3,
C7
C0
C6
请你判断下列课程安排方案哪个(些)是合理的(
)。
A.
C0,
C1,
C2,
C3,
C4,
C5,
C6,
C7
B.
C0,
C1,
C2,
C3,
C4,
C6,
C7,
C5
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输出:
当可以画出满足题意的曲线的时候,输出“YES”;否则,输出“NO”。
输入样例:
3
1
1
2
1
2
2
1
1
2
输出样例:
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.
2005分区联赛
初赛(提高组)
2-2第九届全国青少年信息学奥林匹克联赛初赛试题
(提高组???PASCAL???语言???二小时完成)
●●??全部答案均要写在答案卷子上,写在试卷纸上一律无效??●●
一.单项选择题??(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案.)。
1.??图灵?(Alan?Turing)?是?(??????)。
????A)?美国人????B)?英国人?????C)?德国人??????D)?匈牙利人??????E)?法国人
2.??第一个给计算机写程序的人是(??????)。
????A)?Alan?Mathison?Turing????B)?Ada?Lovelace?????????C)?John?von?Neumann
????D)?John?Mc-Carthy??????????E)?Edsger?Wybe?Dijkstra
3.??十进制数2003等值于二进制数(??????)。
????A)?0100000111???B)?10000011????C)?110000111??D)?11111010011??E)?1111010011
4.??假设A=true,B=false,C=ture,D=ture,逻辑运算表达式A∧B∨C∧D的值是(???)。
????A)?ture???????B)?false??????C)?0????????D)?1???????E)?NULL
5.??一个高度为h?的二叉树最小元素数目是(??????????)。
????A)?2h+1???????B)?h??????????C)?2h-1?????D)?2h??????E)?2h-1
6.??已知队列(13,2,11,34,41,77,5,7,18,26,15),第一个进入队列的元素是13,则第五个出队列的元素是(?????????)。
????A)?5??????????B)?41?????????C)?77????????D)?13???????E)?18
7.??下面一段程序是用(???????)语言书写的。
??????????int?func1(int?n){
????????????????int?i,sum=0;
????????????????for(i=1;i<=n;i++)
?????????????????????sum+=i
i;
?????????????????????return?sum;
??????????}
????A)?FORTRAN????B)?PASCAL???????C)?C?????????D)?PROLOG?????E)?BASIC
8.??设全集E={1,2,3,4,5},集合A={1,4},B={1,2,5},C={2,4},则集合(A?∩B)∪~C?为(??????)。
????A)?空集????????B)?{1}???????C)?{3,5}????D){1,5}?????E)?{1,3,5}
9.??表达式(1+34)
5-56/7?的后缀表达式为(????????)。
????A)?1+34
5-56/7????????B)?-
+1?34?5/56?7?????C)?1?34?+5
56?7/-
????D)?1?34?5
?+56?7/-????E)?1?34+5?56?7-
/
10.??下列计算机设备,即是输入设备,又是输出设备的是(???????)。
?????A)?键盘?????B)?触摸屏?????C)?扫描仪?????D)投影仪?????E)?数字化仪??
二.不定项选择题(共10题,每题1.5分,共计15分。多选少选均不得分)。
11.??下列分辨率的显示器显示出的图像,最清晰的是(?????)。
?????A)?800
600???B)?1024
768????C)?640
480????D)?1280
1024???E)?800
1000
12.??下列说法中,哪个(些)是错误的(????????)。
?????A)程序是指令的序列,它有三种结构:顺序、分支和循环。
?????B)数据总线决定了中央处理器CPU所能访问的最大内存空间的大小。
?????C)中央处理器CPU内部有寄存器组,用来储存数据。
?????D)不同厂家生产的CPU所能处理的指令集是相同的。
?????E)数据传输过程中可能会出错,奇偶校验法可以检测出数据中那一为在传输中出了差错。
13.??CPU访问内存的速度比访问下列哪个(些)存储设备要慢(?????)。
?????A)寄存器??????B)硬盘????????C)软盘?????????D)高速缓存????E)光盘
14.??下列电子邮件地址,哪个(些)是正确的(?????)。
?????A)wang@???B)?cai@jcc.pc.tool.rf.edu.jp???C)?162.105.111.22
?????D)?ccf.?????????E)http://www.
(?http:?/??/?www.?/?"
\t
"_blank?)
15.??数字图像文件可以用下列哪个(些)软件来编辑(?????)。
?????A)画笔(Paintbrush)?B)记事薄(Notepad)?C)?Photoshop??D)?WinRAR??E)Midisoft
16.??下列哪个(些)软件不是操作系统软件的名字(???????)。
?????A)WindowsXP?????B)?DOS?????C)?Linux?????D)?OS/2?????E)?Arch/Info
17.??下列哪个(些)不是个人计算机的硬件组成部分(???????)。
?????A)主板????????B)虚拟内存?????C)电源?????D)硬盘?????E)总线
18.??运算试(2008)10-(3723)8?的结果是(???????)。
?????A)(-1715)10??????B)?(5)10??????C)?(5)16???????D)?(101)2???????E)?(3263)8
19.??已知元素(8,25,14,87,51,90,6,19,20),问这些元素以怎样的顺序进入栈,才能使出栈的顺序满足:8在51前面;90在87的后面;20在14的后面;25在6的前面;19在90的后面。(?????)。
?????A)20,6,8,51,90,25,14,19,87
?????B)51,6,19,20,14,8,87,90,25
?????C)19,20,90,8,6,25,51,14,87
?????D)6,25,51,8,20,19,90,87,14
?????E)25,6,8,51,87,90,19,14,20
20.??假设我们用d=(a1,a2,…,a5),表示无向图G的5个顶点的度数,下面给出的哪(些)组d?值合理(???????)。
?????A){5,4,4,3,1}?????B){4,2,2,1,1}?????C){3,3,3,2,2}
?????D){5,4,3,2,1}?????E){2,2,2,2,2}
三、问题求解(共2题,每题5分,共计10分)
1.?无向图G有16条边,有3个4度顶点、4个3度顶点,其余顶点的度均小于3,则G至少_______个顶点。
2.?某年级学生共选修6门课程,期末考试前,必须提前将这6门课程考完,每人每天只在下午至多考一门课程,设6门课程为C1,C2,C3,C4,C5,C6,S(Ci)为学习Ci?的学生集合。已知S(Ci)∩S(C6)≠ф,i=1,2,…,5,S(Ci)∩S(Ci+1)≠ф,i=1,2,3,4,S(C5)∩S(C1)≠ф,问至少安排_____天才能考完这6门课程。
四.阅读程序(共4题,每题8分,共计32分)
1.??program?Program1;
????var???a,b,c,d,sum?:?longint;
????
????begin
??????read(a,b,c,d);
??????a?:=?a?mod?23;??b?:=?b?mod?28;????c?:=?c?mod?33;
sum?:=?a?
?5544?+?b?
?14421?+?c?
?1228?–?d;
??????sum?:=?sum?+?21252;?????sum?:=?sum?mod?21252;
??????if?(sum?=?0?)?then????sum?:=?21252;
??????writeln(sum);
????end.
输入:283?102?23?320???????????????????????????????输出____________
2.?program?Program2;
???const
?????u?:?array[1..4]?of?integer?=?(0,5,3,1);
?????v?:?array[1..4]?of?integer?=?(0,7,6,5);
???var??a,b,c,d,e,f,x,y,z:?integer;
???begin
?????read(a,b,c,d,e,f);
?????z?:=?f+?e?+?d?+?(c+3)?div?4;???y?:=?5?
?d?+?u[c?mod?4];
?????if?(b?>?y)?then?
???????begin
?????????z?:=?z?+?(b?–?y?+?8)?div?9;
?????????x?:=?((b?–?y?+?8)?div?9?
?9?–(b?–?y))?
?4?+?11?
?e?+?v[c?mod?4];
?????????end
???????else
?????????x?:=?(y?–?b)?
?4?+?11?
?e?+?v[c?mod?4];
???????if?(a?>?x)?then
?????????z?:=?z?+?(a?–?x?+?35)?div?36;
???????writeln(z)
?????end.
输入:?4?7?9?20?56?47???????????????????????????????输出____________________
3.?program?Program3;
var??m,n:?integer;???mark:?Boolean;
function?test(m,N:integer):integer;
??var?i,p:?integer;???flag:?boolean;
??begin
????m?:=?m?–?1;????i?:=?0;???flag?:=?False;
????for?p:=?2
N?downto?(N+1)?do
????begin
??????i:=?(i+m)?mod?p;
??????if?(i????????begin?
??????????test?:=?0;???flag?:=?Ture;??????Break;
??????????end
????end;
????if?not(flag)?then?????test:=1;
??end;
begin?
??read(n);???m:=1;???Mark?:=?False;
??repeat
????if?(test(m,n)=1)?then?
??????begin???writeln(m);?break;???end;
????m:=?m+1;
??until?Mrak;
end.
输入:7?????????????????????????????????????????????输出_________
4.?program?Program4;
var?m,n,i,j:?integer;
????p,w,a,b:?array[0..19]?of?integer;
begin?
??read(n);?m:=?0;
??for?i:=?0?to?n-1?do
??begin????read(p[i]);???b[i]:=1;??end;
??for?i:=0?to??n-1?do
????begin?
??????if?(i>0)?then
??????a[m]:=p[i]-p[i-1]
??????else
??????a[m]:=p[i];
??????m:=m+1;
while?((m>1)?and?(a[m-1]=0))?do?
??????begin???m:=m-1;???b[m]:=1;??end;
??????if?(m>0)?then?
????????w[i]:=b[m-1];
??????else
????????w[i]:=b[0];
????????a[m-1]:=a[m-1]-1;
????????for?j:=0?to?m-1?do????b[j]:=b[j]+1;
while?((m>1)?and?(a[m-1]=0))?do?
??????begin???
m:=m-1;???b[m]:=1;??
end;
??????end;
????for?i:=?0?to?n-1?do
??????begin?
????????write(w[i]);??????write('?');
??????end;
????writeln('?');
??end.
输入:9
??????4?6?6?6?6?8?9?9?9?9?
输出:____________________
五.?完善程序(共2题,第1题每空3分;第2题每空2分。共计28分)。
1.?翻硬币
题目描述:
????????一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后放回原处。在取3枚,取4枚……直至m枚。然后在从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中每一枚又是正面朝上为止。例如,m为1时,翻两次即可。
输????入:仅有的一个数字是这摞硬币的枚数m?,0输????出:为了使这摞硬币中的每一枚都是朝正面朝上所必须翻的次数。
输入样例:30
输出样例:899
程????序:
????program?Program1;
????var???m:integer;
????function?solve(m:?integer):integer;
???????var?i,t,d:?integer;
???????????flag:?Boolean;
???????begin
?????????if?(m?=?1)?then
????????????solve?:=???????(1)????????
?????????else?begin
????????????????d?:=?2
m+1;?????t?:=?2;?????i?:=?1;????flag?:=?False;
????????????????repeat
??????????????????if?(t?=?1)?then
????????????????????begin
??????????????????????solve?:=???????(2)???????;????flag?:=?True;
????????????????????end
??????????????????else?if?(???????(3)????????)?then
?????????????????????????begin
???????????????????????????solve?:=?i
m-1;?????flag?:=?True;
?????????????????????????end
???????????????????????else
?????????????????????????t?:=??????(4)???????;
??????????????????i:=i+1;
????????????????until?flag;
??????????????end
???????end;
????begin
??????read(m);?if?((?????(5)?????)?and?(m<1000))?then
?????????writeln(??????(6)??????);
????end.
2.?OIM地形
题目描述:
二维离散世界有一种地形叫OIM(OI?Mountain)。这种山的坡度只能上升('/')或下降('\'),而且两边的山脚都与地平线等高,山上所有地方都不低于地平线.例如:
??/\????????????????????/\
?/??\/\?是一座OIM;而?/???\????不是。
????????????????????????????\/
这个世界的地理学家们为了方便纪录,给OIM所有可能的形状用正整数编好号,而且每个正整数恰好对应一种山形。他们规定,若两座山的宽度不同,则较宽的编号较大;若宽度相同,则比较从左边开始第1个坡度不同的地方,坡度上升的编号较大。以下三座OIM的编号有小到大递增:
?/\??????/\????????/\??/\
/??\/\??/??\/\/\??/??\/??\。显然/\的编号为1。但是地理学家在整理纪录是发觉,查找编号与山形的对应关系不是很方便。他们希望能快速地从编号得到山的形状。你自告奋勇答应他们写一个程序,输入编号,能马上输出山形。
输????入:一个编号(编号大小不超过600,000,000),
输????出:输入编号所对应的山形,1座山所占行数恰为它的高度,即山顶上不能有多余空行。
输入样例:15
输出样例:???/\??/\
????????????/??\/??\
程????序:
?????program?Program2;
?????const?
???????L:integer?=19;????SZ:?integer?=50;
???????UP:?char?=?'/';???DN:?char?=?'\';
?????Var
???????i,nth,x,y,h,e,f:integer;
???????m:?array[0..1,0..38,0..19]?of?integer;
???????pic:?array[0..49,0..49]?of?char;
?????
procedure?init;
???????var?k,s,a,b,c:?integer;
???????begin
?????????for?a:=0?to?1?do
???????????for?b:=0?to?2
L?do
?????????????for?c:=0?to?L?do
m[a,b,c]:=0;???m[0,0,0]:=1;
?????????for?k:=0?to?2
L-1?do
?????????begin
???????????for?s:=1?to?L?do
???????????begin
?????????????m[0,k+1,s]?:=?m[0,k,s+1]?+?m[1,k,s+1];
m[1,k+1,s]:=??????(1)??????;
???????????end;
?????????????m[0,k+1,0]?:=m[0,k,1]+m[1,k,1];
?????????????end;
???????end;
???????
???????procedure?draw(k,s,nth:integer);
???????begin
?????????if?(k=0)?then?exit;
?????????if?((nth-m[1,k,s])>=0)?then
???????????begin
?????????????nth:=nth-m[1,k,s];
?????????????if?(y>h)?then???????(2)???????;
?????????????pic[y,x]:=UP;??y:=y+1;??x:=x+1;??draw(??????(3)??????);
???????????end
???????????else?begin
????????????????y:=y?–?1;???pic[y,x]:=DN;?????x:=x+1;???draw(k-1,s-1,nth);
????????????????end;
???????end;??
?????????????
?????begin
???????init;
???????read(nth);
???????for?e:=0?to?SZ-1?do
?????????for?f:=0?to?SZ-1?do
???????????pic[e,f]:=?'?';
???????????x:=0;
???????????y:=0
h:=0;
i:=0;
?????
??????while?((nth-m[0,2
i,0])>=0)?do
??????begin?
????????nth:=?nth-m[0,2
i,0];
???????????????(4)????????;
??????end;
??????draw(??????????(5)???????????);
??????for?i:=h?downto?x-1?do
??????begin
????????for?e:=0?to?x-1?do?
????????write(pic[i,e]);
????????writeln('?');
??????end;
?????end.
?
第九届分区联赛提高组初赛官方参考解答
一、单选10题
每题1.5分
B
B
D
A
B
B
C
E
C
B
二、不定项选择10题
每题1.5分
D
BDE
AD
AB
AC
E
B
BCD
D
BE
三、问题求解
每题5分
1.答:11
2.答:4
四、阅读程序
每题8分
1.
8910
2.
126
3.
1872
4.
1
1
2
4
5
1
1
3
9
(空格分隔)
五、完善程序
题一
(1)2
(2)i
m
(3)t=2
m
(4)(t
2)
mod
d
(5)m>0
(6)solve(m)
题二
OIM
(1)m[0,k,s-1]+m[1,k,s-1]
(2)h:=y
(3)k-1,s+1,nth
(4)i:=i+1
(5)2
i,0,nth
来自官方的参考解答,部分题目有可能存在其他正确解答。
各位选手可以自己估分,以上答案为红色部分难度较大,正确率极低,一般选手正常发挥得分在55~65之间,最高得分估计不超过85分。第八届全国青少年信息学(计算机)奥林匹克分区联赛初赛(高中组)
答
案
一、选择一个正确答案代码(A/B/C/D),填入每题的括号内
(每题1.5分,多选无分,共30分)
题号
1
2
3
4
5
6
7
8
9
10
选择
C
A
D
A
C
B
B
D
A
D
题号
11
12
13
14
15
16
17
18
19
20
选择
C
B
C
B
C
B
C
B
C
B
二.问题解答(6
+
8=14分)
1.
答:当n=5时,满足以上条件的放法共有
44
种
2.
答:n0和nk之间的关系为:
n0=(k-1)nk+1
三.阅读程序,并写出程序的正确运行结果:
(8+8+9=26分)
(1)程序的运行结果是:
RRRRWWBBBB?
(2)程序的运行结果是:
30031
(3)程序的运行结果是:
15.00
(PASCAL)
15
(BASIC)
四.根据题意,将程序补充完整(每点3分,共30分)
PASCAL语言
1.
①
C[n+1]
或
d[n]
②
(
yu
+
d[
j1
]<
=
c[
j1+
1
]
)
或
(
d[
j1
]
<
c[
j1+
1]-c[
j1
])
③
yu
:=
yu
+
d[
j1
];
④
e
[
j0
]
:=
s;
⑤
write
(e[
i
]
:
4
);
2.
①
p
and
(b[0]=0)
②
b[j]:=1;
或
p:=false;
?
③
p:=fasle;
或
b[j];=1
④
(a[i,j]=-1)
and
(b[j]=1)
⑤
p
或
b[0]=1
BASIC语言
1.
50
C(
N+1)
80
YU
+
D(J1)>=
C(J1+1)
90
YU
=
YU
+
D(J1)
110
E(J0)
=
S
140
PRINT
E(I);
2.
90
(
P=0)
OR
(B(0)<>0)
140
B(J)=1
160
P=0
190
((A(I,J)=-1)
AND
(B(J)=1))
220
P=1
b[j
]:=
a
[
k
,
j
]