第十五届全国青少年信息学奥林匹克联赛初赛试题x.docx
《第十五届全国青少年信息学奥林匹克联赛初赛试题x.docx》由会员分享,可在线阅读,更多相关《第十五届全国青少年信息学奥林匹克联赛初赛试题x.docx(8页珍藏版)》请在冰豆网上搜索。
![第十五届全国青少年信息学奥林匹克联赛初赛试题x.docx](https://file1.bdocx.com/fileroot1/2022-12/17/324a836b-a325-4e38-b300-2046a92dcff3/324a836b-a325-4e38-b300-2046a92dcff31.gif)
第十五届全国青少年信息学奥林匹克联赛初赛试题x
第十五届全国青少年信息学奥林匹克联赛初赛试题
NOIP2009 初赛
普及组 Pascal 1 By LYL(tgaaa)
( 普及组 Pascal 语言 二小时完成)
●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●
一. 单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案。
)
1、 关于图灵机下面的说法哪个是正确的:
A) 图灵机是世界上最早的电子计算机
B) 由于大量使用磁带操作,图灵机运行速度很慢。
C) 图灵机是英国人图灵发明的,在二战中为破译德军的密码发挥了重要作用。
D) 图灵机只是一个理论上的计算模型。
2、 关于计算机内存,下列说法哪个是正确的:
A) 随机存储器(RAM)的意思是当程序运行时,每次具体分配给程序的内存位置是
随机而不确定的。
B) 1MB 内存通常是指1024*1024 字节大小的内存。
C) 计算机内存严格说来包括主存(memory)、高速缓存(cache)和寄存器(register)
三个部分。
D) 一般内存中的数据即使在断电的情况下也能保留2 个小时以上。
3、 下列关于BIOS 的说法哪个是正确的:
A) BIOS 是计算机基本输入输出系统软件的简称。
B) BIOS 包含了键盘、鼠标、声卡、显卡、打印机等常用输入输出设备的驱动程序。
C) BIOS 一般由操作系统厂商来开发完成。
D) BIOS 能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。
4、 关于CPU 下面那个说法是正确的:
A) CPU 全称为中央处理器(或中央处理单元)。
B) CPU 可以直接运行汇编语言。
C) 同样主频下,32 位的CPU 比16 位的CPU 运行速度快一倍。
D) CPU 最早是由Intel 公司发明的。
5、 关于ASCII,下面哪个说法是正确的:
A) ASCII 码就是键盘上所有键的唯一编码。
B) 一个ASCII 码使用一个字节的内存空间就能够存放。
C) 最新扩展的ASCII 编码方案包含了汉字和其他欧洲语言的编码。
D) ASCII 码是英国人主持制定并推广使用的。
6、 下列软件中不是计算机操作系统的是:
A) Windows B) Linux C) OS/2 D) WPS
7、 关于互联网,下面的说法哪一个是正确的:
A) 新一代互联网使用的IPv6 标准是IPv5 标准的升级与补充。
B) 互联网的入网主机如果有了域名就不再需要IP 地址。
NOIP2009 初赛
普及组 Pascal 2 By LYL(tgaaa)
C) 互联网的基础协议为TCP/IP 协议。
D) 互联网上所有可下载的软件及数据资源都是可以合法免费使用的。
8、 关于HTML 语言下面哪种说法是正确的:
A) HTML 实现了文本、图形、声音乃至视频信息的统一编码。
B) HTML 全称为超文本标记语言。
C) 网上广泛使用的Flash 动画都是由HTML 编写的。
D) HTML 也是一种高级程序设计语言。
9、 关于程序设计语言,下面哪种说法是正确的:
A) 加了注释的程序一般会比同样的没有加注释的程序运行速度慢。
B) 高级语言开发的程序不能使用在低层次的硬件系统(如:
自控机床)或低端手机上。
C) 高级语言相对于低级语言更容易实现跨平台的移植。
D) 以上说法都不对。
10、 已知大写字母A 的ASCII 编码为65(十进制),则大写字母J 的十进制ASCII 编码为:
A) 71 B) 72 C) 73 D) 以上都不是
11、 十进制小数125.125 对应的八进制数是
A) 100.1 B) 175.175 C) 175.1 D) 100.175
12、 有六个元素FEDCBA 从左到右依次顺序进栈,在进栈过程中会有元素被弹出栈。
问下
列哪一个不可能是合法的出栈序列?
A) EDCFAB B) DECABF C) CDFEBA D) BCDAEF
13、 表达式 a*(b+c)-d 的后缀表达式是
A) abcd*+- B) abc+*d- C) abc*+d- D) -+*abcd
14、 一个包含n 个分支节点(非叶节点)的非空二叉树,它的叶节点数目最多为:
A) 2n + 1 B) 2n - 1 C) n - 1 D) n + 1
15、 快速排序最坏情况下的算法复杂度为:
A) O (log2n) B) O (n) C) O (nlog2n) D) O (n2)
16、 又一个由4000 个整数构成的顺序表,假定表中的元素已经按升序排列,采用二分查找
定位一个元素。
则最多需要几次比较就能确定是否存在所查找的元素:
A) 11次 B) 12 次 C) 13 次 D) 14 次
17、 排序算法是稳定的意思是关键码相同的记录排序前后相对位置不发生改变,下列哪种排
序算法是不稳定的:
A) 冒泡排序 B) 插入排序 C) 归并排序 D) 快速排序
18、 已知n 个顶点的有向图,若该图是强连通的(从所有顶点都存在路径到达其他顶点),
则该图中最少有多少条有向边?
A) n B) n + 1 C) n - 1 D) n* (n - 1)
NOIP2009 初赛
普及组 Pascal 3 By LYL(tgaaa)
19、 全国信息学奥林匹克的官方网站为参与信息学竞赛的老师同学们提供相关的信息和资
源,请问全国信息学奥林匹克官方网站的网址是:
A) B) http:
//www.noi.org/
C) D)
20、 在参加NOI 系列竞赛过程中,下面哪一种行为是 不 被严格禁止的:
A) 携带书写工具,手表和不具有通讯功能的电子词典进入赛场。
B) 在联机测试中通过手工计算出可能的答案并在程序里直接输出答案来获取分数。
C) 通过互联网搜索取得解题思路。
D) 在提交的程序中启动多个进程以提高程序的执行效果。
二. 问题求解(共2 题,每空5 分,共10分)
1. 小陈现有2 个任务A,B 要完成,每个任务分别有若干步骤如下:
A=a1->a2->a3,
B=b1->b2->b3->b4->b5。
在任何时候,小陈只能专心做某个任务的一个步骤。
但是如果愿意,
他可以在做完手中任务的当前步骤后,切换至另一个任务,从上次此任务第一个未做的步骤
继续。
每个任务的步骤顺序不能打乱,例如……a2->b2->a3->b3……是合法的,而……
a2->b3->a3->b2……是不合法的。
小陈从B 任务的b1 步骤开始做,当恰做完某个任务的某
个步骤后,就停工回家吃饭了。
当他回来时,只记得自己已经完成了整个任务A,其他的都
忘了。
使计算小陈饭前已做的可能的任务步骤序列共有 __________ 种。
2. 有如下的一段程序:
1. a:
=1;
2. b:
=a;
3. d:
=-a;
4. e:
=a+d;
5. c:
=2*d;
6. f:
=b+e-d;
7. g:
=a*f+c;
现在要把这段程序分配到若干台(数量充足)用电缆连接的PC 上做并行执行。
每台PC 执
行其中的某几个语句,并可随时通过电缆与其他PC 通讯,交换一些中间结果。
假设每台PC
每单位时间可以执行一个语句,且通讯花费的时间不计。
则这段程序最快可以在_______单
位时间内执行完毕。
注意:
任意中间结果只有在某台PC 上已经得到,才可以被其他PC 引
用。
例如若语句4 和6 被分别分配到两台PC 上执行,则因为语句6 需要引用语句4 的计算
结果,语句6 必须在语句4 之后执行。
三. 阅读程序写结果(共4 题,每题8 分,共32 分)
1.
var
a, b:
integer;
function work(a, b:
integer):
integer;
NOIP2009 初赛
普及组 Pascal 4 By LYL(tgaaa)
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.
输入:
20 12
输出:
_____
2.
var
a, b:
array[0..2] of integer;
i, j, tmp:
integer;
begin
for i :
= 0 to 2 do
read(b[i]);
for i :
= 0 to 2 do
begin
a[i] :
= 0;
for j :
= 0 to i do
begin
inc(a[i], b[j]);
inc(b[a[i] mod 3], a[j]);
end;
end;
tmp :
= 1;
for i :
= 0 to 2 do
begin
a[i] :
= a[i] mod 10;
b[i] :
= b[i] mod 10;
tmp :
= tmp * (a[i] + b[i])
end;
NOIP2009 初赛
普及组 Pascal 5 By LYL(tgaaa)
writeln(tmp);
end.
输入:
2 3 5
输出:
_______
3. const c = 2009;
var
n, p, s, i, j, t:
integer;
begin
read(n, p);
s :
= 0;
t :
= 1;
for i :
= 1 to n do
begin
t :
= t * p mod c;
for j :
= 1 to i do
s :
= (s + t) mod c;
end;
writeln(s);
end.
输入:
11 2
输出:
______
4.
var
a:
string;
n:
integer;
procedure getnext(var str:
string);
var
l, i, j, k:
integer;
temp:
char;
begin
l :
= length(str);
k :
= l - 1;
while (k >= 1) and (str[k] > str[k + 1]) do
dec(k);
i :
= k + 1;
NOIP2009 初赛
普及组 Pascal 6 By LYL(tgaaa)
while (i <= l) and (str[i] > str[k]) do
inc(i);
temp :
= str[k];
str[k] :
= str[i - 1];
str[i - 1] :
= temp;
for i :
= l downto k + 1 do
for j :
= k + 1 to i - 1 do
if str[j] > str[j + 1] then
begin
temp :
= str[j];
str[j] :
= str[j + 1];
str[j + 1] :
= temp;
end;
end;
begin
read(a);
read(n);
while n > 0 do
begin
getnext(a);
dec(n);
end;
write(a);
end.
输入:
NOIP 3
输出:
_______
四. 完善程序(前8 空,每空3 分,后2 空,每空2 分,共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
NOIP2009 初赛
普及组 Pascal 7 By LYL(tgaaa)
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. (国王放置)在n*m 的棋盘上放置k 个国王,要求k 个国王互相不攻击,有多少
种不同的放置方法。
假设国王放置在第 (x, y)格,国王的攻击的区域是:
(x-1,y-1),
(x-1,y), (x-1,y+1), (x, y-1), (x,y+1), (x+1,y-1), (x+1,y), (x+1,y+1)。
读入三个数 n,m,k,输出答案。
题目利用回溯法求解。
棋盘行标号为 0~n-1,列标号为
0~m-1。
var
n, m, k, ans:
integer;
hash:
array[0..4, 0..4] of integer;
procedure work(x, y, tot:
integer);
var
i, j:
integer;
begin
if tot = k then
begin
inc(ans);
exit;
end;
NOIP2009 初赛
普及组 Pascal 8 By LYL(tgaaa)
repeat
while hash[x, y] <> 0 do
begin
inc(y);
if y = m then
begin
inc(x);
y :
= ① ;
end;
if x = n then
exit;
end;
for i :
= x - 1 to x + 1 do
if (i >= 0) and (i < n) then
for j :
= y - 1 to y + 1 do
if (j >= 0) and (j <= m) then
② ;
③ ;
for i :
= x - 1 to x + 1 do
if (i >= 0) and (i < n) then
for j :
= y - 1 to y + 1 do
if (j >= 0) and (j <= m) then
④ ;
inc(y);
if y = m then
begin
inc(x);
y :
= 0;
end;
if x = n then
exit;
until false;
end;
begin
read(n, m, k);
ans :
= 0;
fillchar(hash, sizeof(hash), 0);
⑤ ;
writeln(ans);
end.