试卷 NOIP 2013 普及组初赛试题
NOIP 2013 普及组初赛试题
选择题
第 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 题    单选题

逻辑表达式()的值与变量A的真假无关。

A.

B.

C.

D.

第 5 题    单选题

将(2, 6, 10, 17)分别存储到某个地址区间为0~10 的哈希表中,如果哈希函数 h(x) = ( ),将不会产生冲突,其中a mod b表示 a 除以 b 的余数。

A.

B.

C.

D.

第 6 题    单选题

在十六进制表示法中,字母 A 相当于十进制中的( ).

A.

9

B.

10

C.

15

D.

16

第 7 题    单选题

下图中所使用的数据结构是( )。

A.

哈希表

B.

C.

队列

D.

二叉树

第 8 题    单选题

在 Windows 资源管理器中,用鼠标右键单击一个文件时,会出现一个名为“复 制”的操作选项,它的意思是( )。

A.

用剪切板中的文件替换该文件

B.

在该文件所在文件夹中,将该文件克隆一份

C.

将该文件复制到剪切板,并保留原文件

D.

将该文件复制到剪切板,并删除原文件

第 9 题    单选题

已知一棵二叉树有10 个节点,则其中至多有( )个节点有 2 个子节点。

A.

4

B.

5

C.

6

D.

7

第 10 题    单选题

在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通图。下图是一 个有4个顶点、6条边的连通图。若要使它不再是连通图,至少要删去其中的( )条边。

A.

1

B.

2

C.

3

D.

4

第 11 题    单选题

二叉树的( )第一个访问的节点是根节点。

A.

先序遍历

B.

中序遍历

C.

后序遍历

D.

以上都是

第 12 题    单选题

以 A0 作为起点,对下面的无向图进行深度优先遍历时,遍历顺序不可能是( )。

A.

A0, A1, A2, A3

B.

A0, A1, A3, A2

C.

A0, A2, A1, A3

D.

A0, A3, A1, A2

第 13 题    单选题

IPv4 协议使用32 位地址,随着其不断被分配,地址资源日趋枯竭。因此,它正逐 渐被使用( )位地址的 IPv6 协议所取代。

A.

40

B.

48

C.

64

D.

128

第 14 题    单选题

( )的平均时间复杂度为 O(n log n),其中 nn 是待排序的元素个数。

A.

快速排序

B.

插入排序

C.

冒泡排序

D.

基数排序

第 15 题    单选题

下面是根据欧几里得算法编写的函数,它所计算的是a和b的( )。

int euclid(int a, int b) {
	if (b == 0)
		return a;
	else
		return euclid(b, a % b);
}


A.

最大公共质因子

B.

最小公共质因子

C.

最大公约数

D.

最小公倍数

第 16 题    单选题

通常在搜索引擎中,对某个关键词加上双引号表示( )。

A.

排除关键词,不显示任何包含该关键词的结果

B.

将关键词分解,在搜索结果中必须包含其中的一部分

C.

精确搜索,只显示包含整个关键词的结果

D.

站内搜索,只显示关键词所指向网站的内容

第 17 题    单选题

中国的国家顶级域名是( )。

A.

cn

B.

ch

C.

chn

D.

china

第 18 题    单选题

把 64 位非零浮点数强制转换成32 位浮点数后,不可能( ).

A.

大于原数

B.

小于原数

C.

等于原数

D.

与原数符号相反

第 19 题    单选题

下列程序中,正确计算1, 2, ..., 100 这 100 个自然数之和sum(初始值为0)的是 ( ).

A.

i = 1; do{ sum +=i; i++; }while(i<=100);

B.

i = 1; do{ sum +=i; i++; }while(i > 100);

C.

i = 1; while(i < 100){ sum+=i; i++; }

D.

i = 1; while(i >= 100){ sum+=i; i++; }

第 20 题    单选题

CCF NOIP 复赛全国统一评测时使用的系统软件是( )。

A.

NOI Windows

B.

NOI Linux

C.

NOI Mac OS

D.

NOI DOS

问题求解
第 21 题    填空题

7 个同学围坐一圈,要选 2 个不相邻的作为代表,有_________种不同的选法。

第 22 题    填空题

如图 就破解出了密码s1 =___ ,s2 = ___,s3 =___ ,s4 =___。 答案格式为:纯数字,用,连接

阅读程序
第 23 题    填空题

阅读程序写结果:

#include <iostream>
using namespace std;
int main() {
	int a, b;
	cin >> a >> b;
	cout << a << "+" << b << "=" << a + b << endl;
}

输入: 3 5

输出:_______

第 24 题    填空题

阅读程序写结果:

#include <iostream>
using namespace std;
int main() {
	int a, b, u, i, num;
	cin>>a>>b>>u;
	num = 0;
	for (i = a; i <= b; i++)
		if ((i % u) == 0)
			num++;
	cout<<num<<endl;
	return 0;
}

输入: 1 100 15

输出:__________

第 25 题    填空题

阅读程序写结果:

#include <iostream>

using namespace std;

int main()

{

	const int SIZE = 100;

	int n, f, i, left, right, middle, a[SIZE];

	cin>>n>>f;

	for (i = 1; i <= n; i++)

		cin>>a[i];

	left = 1;

	right = n;

	do {

		middle = (left + right) / 2;

		if (f <= a[middle])

			right = middle;

		else

			left = middle + 1;

	} while (left < right);

	cout<<left<<endl;

	return 0;

}

输入:

12 17

2 4 6 9 11 15 17 18 19 20 21 25

输出:__________________

第 26 题    填空题

阅读程序写结果:

#include <iostream> 

using namespace std;

int main()

{

 const int SIZE = 100;

 int height[SIZE], num[SIZE], n, ans;

 cin>>n;

 for (int i = 0; i < n; i++) 

 cin>>height[i]; num[i] = 1;

 for (int j = 0; j < i; j++) 

 {

 if ((height[j] < height[i]) && (num[j] >= num[i]))

 num[i] = num[j]+1;

 }

 }

 ans = 0;

 for (int i = 0; i < n; i++)

 { 

 if (num[i] > ans) ans = num[i];

 }

 cout<<ans<<endl;

}

输入:

6

2 5 3 11 12 4

输出:___________

程序填空
第 27-31 题    组合题

完善程序:

(序列重排)全局数组变量 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):

void swap1( int p ) {
	int i, j, b[SIZE];
	for ( i = 1; i <= p; i++ )
		b[①] = a[i];
	for ( i = p + 1; i <= n; i++ )
		b[i - p] = ②;
	for ( i = 1; i <= ③; i++ )
		a[i] = b[i];
}
我们也可以用时间换空间,使用时间复杂度为O(n^2)、空间复杂度为O(1)的算法:
void swap2(int p) {
	int i, j, temp;
	for ( i = p + 1; i <= n; i++ ) {
		temp = a[i];
		for ( j = i; j >= ④; j-- )
			a[j] = a[j - 1];
		⑤ = temp;
	}

第一空(3分):_________________________

第二空(3分):_________________________

第三空(2分):_________________________

第四空(3分):_________________________

第五空(3分):_________________________


第 27 题 填空
第 28 题 填空
第 29 题 填空
第 30 题 填空
第 31 题 填空
第 32-36 题    组合题

完善程序:

(二叉查找树) 二叉查找树具有如下性质: 每个节点的值都大于其左子树上所有节点的值、

小于其右子树上所有节点的值。试判断一棵树是否为二叉查找树。

输入的第一行包含一个整数n,表示这棵树有n 个顶点, 编号分别为 1, 2, ... ,n,其中编号为

1 的为根结点。之后的第 i 行有三个数valuevalue, left_child , right_child,分别表示该节

点关键字的值、左子节点的编号、右子节点的编号;如果不存在左子节点或右子节点,则用

0 代替。输出 1 表示这棵树是二叉查找树,输出0 则表示不是。

#include <iostream>
using namespace std;
const int SIZE = 100;
const int INFINITE = 1000000;
struct node {
	int left_child, right_child, value;
};
node a[SIZE];
int is_bst( int root, int lower_bound, int upper_bound ) {
	int cur;
	if ( root == 0 )
		return(1);
	cur = a[root].value;
	if ( (cur > lower_bound) && ( ① ) && (is_bst( a[root].left_child,
	                                       lower_bound, cur ) == 1) && (is_bst( ②, ③, ④ ) == 1) )
		return(1);
	return(0);
}
int main() {
	int i, n;
	cin >> n;
	for ( i = 1; i <= n; i++ )
		cin >> a[i].value >> a[i].left_child >> a[i].right_child;
	cout << is_bst( ⑤, -INFINITE, INFINITE ) << endl;
	return(0);
}

第一空(3分):_________________________

第二空(3分):_________________________

第三空(3分):_________________________

第四空(3分):_________________________

第五空(2分):_________________________


第 32 题 填空
第 33 题 填空
第 34 题 填空
第 35 题 填空
第 36 题 填空
答题卡
选择题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
问题求解
21 22
阅读程序
程序填空
题目总数:28
总分数:100
时间:120分钟
QQ
微信