试卷 2009年全国青少年信息学奥林匹克竞赛NOIP普及组初赛试卷
2009年全国青少年信息学奥林匹克竞赛NOIP普及组初赛试卷
选择题
第 1 题    单选题

关于图灵机下面的说法哪个是正确的

A.

图灵机是世界上最早的电子计算机

B.

由于大量使用磁带操作,图灵机运行速度很慢

C.

图灵机是英国人图灵发明的,在二战中为破译德军的密码发挥了重要作用

D.

图灵机只是一个理论上的计算模型

第 2 题    单选题

关于HTML下面哪种说法是正确的

A.

HTML实现了文本、图形、声音乃至视频信息的统一编码。

B.

HTML全称为超文本标记语言。

C.

网上广泛使用的 Flash动画都是由HTML编写的。

D.

HTML也是一种高级程序设计语言。

第 3 题    单选题

关于互联网,下面的说法哪一个是正确的

A.

新一代互联网使用的IPv6标准是IPv5标准的升级与补充。

B.

互联网的入网主机如果有了域名就不再需要IP地址。

C.

互联网的基础协议为TCP/IP协议。

D.

互联网上所有可下载的软件及数据资源都是可以合法免费使用的。

第 4 题    单选题

下列软件中不是计算机操作系统的是

A.

Windows

B.

 Linux

C.

OS/2

D.

WPS

第 5 题    单选题

关于ASCII,下面哪个说法是正确的

A.

ASCII码就是键盘上所有键的唯一编码。

B.

一个ASCII码使用一个字节的内存空间就能够存放。

C.

最新扩展的ASCII编码方案包含了汉字和其他欧洲语言的编码。

D.

ASCII码是英国人主持制定并推广使用的。

第 6 题    单选题

关于CPU下面哪个说法是正确的

A.

CPU全称为中央处理器(或中央处理单元)。

B.

CPU可以直接运行汇编语言。

C.

同样主频下,32位的CPU比16位的CPU运行速度快一倍。

D.

CPU最早是由Intel公司发明的。

第 7 题    单选题

关于BIOS下面说法哪个是正确的

A.

 BIOS是计算机基本输入输出系统软件的简称。

B.

BIOS里包含了键盘、鼠标、声卡、显卡、打印机等常用输入输出设备的驱动程序。

C.

BIOS一般由操作系统厂商来开发完成。

D.

BIOS能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。

第 8 题    单选题

关于计算机内存下面的说法哪个是正确的

A.

随机存储器(RAM)的意思是当程序运行时,每次具体分配给程序的内存位置是随机而不确定的。

B.

1MB内存通常是指1024*1024字节大小的内存。

C.

计算机内存严格说来包括主存(memory)、高速缓存(cache)和寄存器(register)三个部分。

D.

一般内存中的数据即使在断电的情况下也能保留2个小时以上。

第 9 题    单选题

已知n个顶点的有向图,若该图是强连通的(从所有顶点都存在路径到达其他顶点),则该图中最少有多少条有向边?

A.

n

B.

n+1

C.

n-1

D.

 n(n-1)

第 10 题    单选题

排序算法是稳定的意思是关键码相同的记录排序前后相对位置不发生改变,下列哪种排序算法是不稳定的

A.

冒泡排序

B.

插入排序

C.

归并排序

D.

快速排序

第 11 题    单选题

有一个由4000个整数构成的顺序表,假定表中的元素已经按升序排列,采用二分查找定位一个元素。则最多需要几次比较就能确定是否存在所查找的元素

A.

11

B.

12

C.

13

D.

14

第 12 题    单选题

快速排序最坏情况下的算法时间复杂度为

A.

O(log2n)

B.

O(n)

C.

O(nlog2n)

D.

O(n2)

第 13 题    单选题

一个包含n个分支结点(非叶结点)的非空二叉树,它的叶结点数目最多为

A.

2n+1

B.

2n-1

C.

n-1

D.

n+1

第 14 题    单选题

表达式a*(b+c)-d的后缀表达式是

A.

abcd*+-

B.

abc+*d-

C.

abc*+d-

D.

-+*abcd

第 15 题    单选题

有六个元素FEDCBA 从左至右依次顺序进栈,在进栈过程中会有元素被弹出栈。问下列哪一个不可能是合法的出栈序列?

A.

EDCFAB

B.

DECABF

C.

CDFEBA

D.

 BCDAEF

第 16 题    单选题

十进制小数125.125对应的8进制数是

A.

100.1

B.

175.175

C.

175.1

D.

100.175

第 17 题    单选题

已知大写字母A的ASCII编码为65(10进制),则大写字母J的10进制ASCII编码为

A.

71

B.

72

C.

73

D.

以上都不是

第 18 题    单选题

关于程序设计语言,下面哪个说法是正确的

A.

加了注释的程序一般会比同样的没有加注释的程序运行速度慢。

B.

高级语言开发的程序不能使用在低层次的硬件系统如:自控机床或低端手机上。

C.

高级语言相对于低级语言更容易实现跨平台的移植。

D.

以上说法都不对。

第 19 题    单选题

全国信息学奥林匹克竞赛的官方网站为参与信息学竞赛的老师同学们提供相关的信息和资源,请问全国信息学奥林匹克竞赛官方网站的网址是

A.

http://www.noi.com/

B.

http://www.noi.org/

C.

http://www.noi.cn/

D.

http://www.xinxixue.com/

第 20 题    单选题

在参加NOI系列竞赛过程中,下面哪一种行为是不被严格禁止的

A.

携带书写工具,手表和不具有通讯功能的电子词典进入赛场。

B.

在联机测试中通过手工计算出可能的答案并在程序里直接输出答案来获取分数。

C.

通过互联网搜索取得解题思路。


D.

在提交的程序中启动多个进程以提高程序的执行效率。

问题求解
第 21 题    填空题

小陈现有2个任务A,B要完成,每个任务分别有若干步骤如下:A=a1->a2->a3,B=b1->b2->b3->b4->b5。在任何时候,小陈只能专心做某个任务的一个步骤。但是如果愿意,他可以在做完手中任务的当前步骤后,切换至另一个任务,从上次此任务第一个未做的步骤继续。每个任务的步骤顺序不能打乱,例如……a2->b2->a3->b3……是合法的,而……a2->b3->a3->b2……是不合法的。小陈从B任务的b1步骤开始做,当恰做完某个任务的某个步骤后,就停工回家吃饭了。当他回来时,只记得自己已经完成了整个任务A,其他的都忘了。试计算小陈饭前已做的可能的任务步骤序列共有[ ]种。

第 22 题    填空题

有如下的一段程序:

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之后执行。

阅读程序写结果
第 23 题    填空题

NOIP2009年普及组阅读程序填写结果题:

#include <iostream>
usingnamespacestd;
int a, b;
int work(int a, int b) {
    if (a % b)
        return work(b, a % b);
    return b;
}

int main() {
    cin >> a >> b;
    cout << work(a, b) << endl;
    return0;
}

输入:20 12 

输出:_______

第 24 题    填空题

NOIP2009年普及组阅读程序填写结果题:

#include <iostream>
usingnamespacestd;
constint c = 2009;
int main() {
    int n, p, s, i, j, t;
    cin >> n >> p;
    s = 0;
    t = 1;
    for (i = 1; i <= n; i++) {
        t = t * p % c;
        for (j = 1; j <= i; j++)
            s = (s + t) % c;
    }
    cout << s << endl;
    return0;
}

输入:11 2 

输出:____

第 25 题    填空题

NOIP2009年普及组阅读程序填写结果题:

#include <iostream>
usingnamespacestd;
int main() {
    int a[3], b[3];
    int i, j, tmp;
    for (i = 0; i < 3; i++)
        cin >> b[i];
    for (i = 0; i < 3; i++) {
        a[i] = 0;
        for (j = 0; j <= i; j++) {
            a[i] += b[j];
            b[a[i] % 3] += a[j];
        }
    }
    tmp = 1;
    for (i = 0; i < 3; i++) {
        a[i] %= 10;
        b[i] %= 10;
        tmp *= a[i] + b[i];
    }
    cout << tmp << endl;
    return0;
}

输入:2 3 5

输出:_____

第 26 题    填空题

NOIP2009年普及组阅读程序填写结果题:

#include <iostream>
usingnamespacestd;
constint maxn = 50;
void getnext(char str[]) {
    int l = strlen(str), i, j, k, temp;
    k = l - 2;
    while (k >= 0 && str[k] > str[k + 1]) k--;
    i = k + 1;
    while (i < l && str[i] > str[k]) i++;
    temp = str[k];
    str[k] = str[i - 1];
    str[i - 1] = temp;
    for (i = l - 1; i > k; i--)
        for (j = k + 1; j < i; j++)
            if (str[j] > str[j + 1]) {
                temp = str[j];
                str[j] = str[j + 1];
                str[j + 1] = temp;
            }
    return;
}

int main() {
    char a[maxn];
    int n;
    cin >> a >> n;
    while (n > 0) {
        getnext(a);
        n--;
    }
    cout << a << endl;
    return0;
}

输入:NOIP 3 

输出:___

完善程序
第 27 题    填空题

NOIP2009年普及组完善程序题:(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。

#include <iostream>
usingnamespacestd;
int a[101];
int n, i, ans, len, tmp, beg;
int main() {
    cin >> n;
    for (i = 1; i <= n; i++)
        cin >> a[i];
    tmp = 0;
    ans = 0;
    len = 0;
    beg = [    ①    ];
    for (i = 1; i <= n; i++) {
        if (tmp + a[i] > ans) {
            ans = tmp + a[i];
            len = i - beg;
        } elseif ( [       ②        ] &&i - beg > len)
        len = i - beg;
        if (tmp + a[i] [   ③   ]  ){
            beg =   [  ④    ];
            tmp = 0;
        }
        else
        [       ⑤        ];
    }
    cout << ans << " " << len << endl;
    return0;
}
第 28 题    填空题

NOIP2009年普及组完善程序题:(国王放置) 在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。

#include <iostream>
usingnamespacestd;
int n, m, k, ans;
int hash[5][5];
void work(int x, int y, int tot) {
    int i, j;
    if (tot == k) {
        ans++;
        return;
    }
    do {
        while (hash[x][y]) {
            y++;
            if (y == m) {
                x++;
                y =[     ①     ];
            }
            if (x == n)
                return;
        }
        for (i = x - 1; i <= x + 1; i++)
            if (i >= 0 && i < n)
                for (j = y - 1; j <= y + 1; j++)
                    if (j >= 0 && j < m)
        [            ②         ];
        [        ③         ];
        for (i = x - 1; i <= x + 1; i++)
            if (i >= 0 && i < n)
                for (j = y - 1; j <= y + 1; j++)
                    if (j >= 0 && j < m)
        [         ④     ];
        y++;
        if (y == m) {
            x++;
            y = 0;
        }
        if (x == n)
            return;
    } while (1);
}

int main() {
    cin >> n >> m >> k;
    ans = 0;
    memset(hash, 0, sizeof(hash));
    [        ⑤       ];
    cout << ans << endl;
    return0;
}
答题卡
选择题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
问题求解
21 22
阅读程序写结果
完善程序
27 28
题目总数:28
总分数:100
时间:120分钟