2005年NOIP提高组初赛真题

一、单项选择题(共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分)
21. 将数组{32, 74, 25, 53, 28, 43, 86, 47}中的元素按从小到大的顺序排列,每次可以交换任意两个元素,最少需要交换_________次。
22. 取火柴游戏的规则如下:一堆火柴有N根,A、B两人轮流取出。每人每次可以取1 根或2 根,最先没有火柴可取的人为败方,另一方为胜方。如果先取者有必胜策略则记为1,先取者没有必胜策略记为0。当N 分别为100,200,300,400,500 时,先取者有无必胜策略的标记顺序为(回答应为一个由0 和/或1 组成的字符串)。_________
四.阅读程序(共4题,每题8分,共计32 分)
23.
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
输出:____①_____
24.
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
输出:____①_____
25.
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
输出:____①_____
26.
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分)
27. 木材加工

题目描述:

木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。木头长度的单位是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.
28. 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.
查看参考答案