NOIP 2009 普及组初赛试题答案解析

第 1 题

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

A. 图灵机是世界上最早的电子计算机。 B. 由于大量使用磁带操作,图灵机运行速度很慢。 C. 图灵机是英国人图灵发明的,在二战中为破译德军的密码发挥了重要作用。 D. 图灵机只是一个理论上的计算模型。

正确答案: D

图灵机是一个虚拟的机器,由数学家阿兰·图灵1936年提出来的,尽管这个机器很简单,但它可以模拟计算机的任何算法,无论这个算法有多复杂。

假设有一个无穷的纸带,纸带就像一个存储器一样。纸带上面的每个格子是空白的,但是可以读写数据,在这个例子里,机器只能写0,1,或者什么也不写。这个机器就是包含3个信号的图灵机。

第 2 题

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

A. 随机存储器(RAM)的意思是当程序运行时,每次具体分配给程序的内存位置是随机而不确定的。 B. 1MB1MB 内存通常是指 1024×10241024×1024 字节大小的内存。 C. 计算机内存严格说来包括主存(memory)、高速缓存(cache)和寄存器(register)三个部分。 D. 一般内存中的数据即使在断电的情况下也能保留 22 个小时以上。

正确答案: B

1KB=1024B 1MB=1024KB

第 3 题

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

A. BIOS 是计算机基本输入输出系统软件的简称。 B. BIOS 里包含了键盘、鼠标、声卡、显卡、打印机等常用输入输出设备的驱动程序。 C. BIOS 一般由操作系统厂商来开发完成。 D. BIOS 能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。

正确答案: A

BIOS 其实是一个英文缩略词,即 “Basic Input Output System” 四个单词的首字母组合,中文直译为“基本输入输出系统”

第 4 题

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

A. CPU 全称为中央处理器(或中央处理单元)。 B. CPU 可以直接运行汇编语言。 C. 同样主频下,32 位的 CPU 比 16 位的 CPU 运行速度快一倍。 D. CPU 最早是由 Intel 公司发明的。

正确答案: A

CPU(中央处理单元)负责处理和执行指令

第 5 题

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

A. ASCII 码就是键盘上所有键的唯一编码。 B. 一个 ASCII 码使用一个字节的内存空间就能够存放。 C. 最新扩展的 ASCII 编码方案包含了汉字和其他欧洲语言的编码。 D. ASCII 码是英国人主持制定并推广使用的。

正确答案: B

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

第 6 题

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

A. Windows B. Linux C. OS/2 D. WPS

正确答案: D

WPS 2333

第 7 题

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

A. 新一代互联网使用的 IPv6 标准是 IPv5 标准的升级与补充。 B. 互联网的入网主机如果有了域名就不再需要 IP 地址。 C. 互联网的基础协议为 TCP/IP 协议。 D. 互联网上所有可下载的软件及数据资源都是可以合法免费使用的。

正确答案: C

第 8 题

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

A. HTML 实现了文本、图形、声音乃至视频信息的统一编码。 B. HTML 全称为超文本标记语言。 C. 网上广泛使用的 Flash 动画都是由 HTML 编写的。 D. HTML 也是一种高级程序设计语言。

正确答案: B

超文本标记语言(英语:HyperText Markup Language,简称:HTML)

第 9 题

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

A. 加了注释的程序一般会比同样的没有加注释的程序运行速度慢。 B. 高级语言开发的程序不能使用在低层次的硬件系统如:自控机床或低端手机上。 C. 高级语言相对于低级语言更容易实现跨平台的移植。 D. 以上说法都不对。

正确答案: C

高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好

第 10 题

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

A. 71 B. 72 C. 73 D. 以上都不是

正确答案: D

65+6=71

第 11 题

十进制小数 125.125125.125 对应的 88 进制数是

A. 100.1 B. 175.175 C. 175.1 D. 100.175

正确答案: C

在这里插入图片描述

第 12 题

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

A. EDCFABEDCFAB B. DECABFDECABF C. CDFEBACDFEBA D. BCDAEFBCDAEF

正确答案: C

在这里插入图片描述

第 13 题

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

A. abcd*+- B. abc+*d- C. abc*+d- D. -+*abcd

正确答案: B

在这里插入图片描述

第 14 题

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

A.2n+1 B. 2n−1 C. n−1 D. n+1

正确答案: D

当n1 = 0时,n0有最大值 n + 1 即一个包含n个分支节点(非叶节点)的非空二叉树,它的叶节点数目最多为 n + 1

第 15 题

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

A. O*(log2n)* B. O(n) C. O*(nlog2n) D. O(n2)*

正确答案: D

img

如果数组是倒序的,时间复杂度为 O ( n 2 ) O(n^2) O(n2)

第 16 题

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

A. 11 次 B. 12 次 C. 13 次 D. 14 次

正确答案: B

log ⁡ 2 4000 = 12 \log_{2}{4000}=12 log24000=12

第 17 题

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

A. 冒泡排序 B. 插入排序 C. 归并排序 D. 快速排序

正确答案: D

看上面的动画就可以看出快速排序是不稳定

第 18 题

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

A. n B.n+1 C. n−1 D. n(n−1)

正确答案: A

性质:有n个顶点的有n个顶点的强连通图最多有n(n-1)条边,最少有n条边。

最多的情况:即n个顶点两两相连。

最少的情况:即n个顶点围城一个圈。

第 19 题

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

A. http://www.noi.com/ B. http://www.noi.org/ C. http://www.noi.cn/ D. http://www.xinxixue.com/

正确答案: C

第 20 题

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

A. 携带书写工具,手表和不具有通讯功能的电子词典进入赛场。 B. 在联机测试中通过手工计算出可能的答案并在程序里直接输出答案来获取分数。 C. 通过互联网搜索取得解题思路。 D. 在提交的程序中启动多个进程以提高程序的执行效率。

正确答案: B

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

可以推论,n个物体要放到m个位置上,并满足a[1]<a[2]<a[3]…<a[n],可以推论出,a[1]<a[2]<a[3]<…<a[n]<n+1; 实际上就是在n+m-1个位置中选n个位置。

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

正确答案: 5

b的执行需要a,则至少需要1个单位时间;因为要做并行执行所以b和d可以同步完成,e的执行需要a,在第一步已经有值,不需要耗费时间,只需要计算d到e的时间。

第 23 题

阅读程序写结果:

#include <iostream>
using namespace std;

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;
	return 0;
}

输入:20 12

正确答案: 4

20%12=8

12%8=4

8%4=0

第 24 题

阅读程序写结果:

#include <iostream>
using namespace std;
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;
	return 0;
}

输入:2 3 5

正确答案: 416

过程如下:

b[0]=2,b[1]=3,b[2]=5

b[j]	a[i]+=b[j];	a[j]	a[i]%3	b[a[i]%3]+=a[j];

1
i=0 j=0 2 2 2 2 b[2]=5+2=7
i=1 j=0 2 2 2 2 b[2]=7+2=9
 j=1 3 5 5 2 b[2]=9+5=14
i=2 j=0 2 2 2 2 b[2]=14+2=16
 j=1 3 5 5 2 b[2]=16+5=21
 j=2 21 26 26 2 b[2]=21+26=47
第二个for循环

a[i] a[i]%10 b[i] b[i]%10 a[i]+b[i] tmp*=a[i]+b[i]
1
i=0 2 2 2 2 4 4
i=1 5 5 3 3 8 32
i=2 26 6 47 7 13 416

第 25 题

阅读程序写结果:

#include <iostream>
using namespace std;

const int 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;
	return 0;
}

输入:11 2

正确答案: 782

i t j s
1 2 1 2
2 4 1 6
  2 10
3 8 1 18
  2 26
  3 34
4 16 1 50
  2 66
  3 82
  4 98
5 32 1 130
  2 162
  3 194
  4 226
  5 258
6 64 1 322
  2 386
  3 450
  4 514
  5 578
  6 642
7 128 1 770
  2 898
  3 1026
  4 1154
  5 1282
  6 1410
  7 1538
8 256 1 1794
  2 41
  3 297
  4 553
  5 809
  6 1065
  7 1321
  8 1577
9 512 1 80
  2 592
  3 1104
  4 1616
  5 119
  6 631
  7 1143
  8 1655
  9 158
10 1024 1 1182
  2 197
  3 1221
  4 236
  5 1260
  6 275
  7 1299
  8 314
  9 1338
  10 353
11 39 1 392
  2 431
  3 470
  4 509
  5 548
  6 587
  7 626
  8 665
  9 704
  10 743
  11 782

第 26 题

阅读程序写结果:

#include <iostream>
using namespace std;

const int 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;
	return 0;
}

输入:NOIP 3

正确答案: NPOI

n a k str[k] str[k+1] i str[k] str[k+1] a输出
3 NOIP 2 I O 3 P I NOPI
2 NOPI 2 P O 2 P O NPIO
1 NPOI 2 I P 3 O I NPOI

第 27 题

完善程序:
(最大连续子段和) 给出一个数列(元素个数不多于 100100),数列元素均为负整数、正整数、00。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,−5,3,2,44,−5,3,2,4 时,输出 99 和 33;数列为 1,2,3,−5,0,7,81,2,3,−5,0,7,8 时,输出 1616 和 77。

#include <iostream>
using namespace std;

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;
		}
		else if ( [] &&i-beg>len)
			len=i-beg;
		if (tmp+a[i] []  ){
			beg=   [] ;
			tmp=0;
		}
		else
		[];
	}
	cout << ans << " " << len << endl;
	return 0;
}

正确答案: 0

变量初始化

正确答案: tmp+a[i]==ans / a[i]+tmp==ans / ans==a[i]+tmp

判断的是tmp+a[i]和tmp的大于关系

正确答案: <0

这里应该填小于的情况

正确答案: i

下方tmp重置为0,所以beg这个时候也是重置,但是重置为i

正确答案: tmp+=a[i] / tmp=tmp+a[i]

=n;i++){
if (tmp+a[i]>ans){
ans=tmp+a[i];
len=i-beg;
}
else if ( [ ② ] &&i-beg>len)
len=i-beg;
if (tmp+a[i] [ ③ ] ){
beg= [ ④ ] ;
tmp=0;
}
else
[ ⑤ ];
}
cout << ans << " " << len << endl;
return 0;
}


1.

正确答案: 0

>   变量初始化

2.

正确答案: tmp+a[i]\==ans / a[i]+tmp\==ans / ans==a[i]+tmp

>   判断的是tmp+a[i]和tmp的大于关系

3.

正确答案: <0

>   这里应该填小于的情况

4.

正确答案: i

>   下方tmp重置为0,所以beg这个时候也是重置,但是重置为i

5.

正确答案: tmp+=a[i] / tmp=tmp+a[i]

>   其余情况把a[i]累加到tmp中,让tmp在循环中起作用
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值