历年noip初赛普及组试题.docx
《历年noip初赛普及组试题.docx》由会员分享,可在线阅读,更多相关《历年noip初赛普及组试题.docx(50页珍藏版)》请在冰豆网上搜索。
历年noip初赛普及组试题
历年noip普及组初赛试题汇编
芜湖县实验学校NOIP初赛复习资料
第十五届全国青少年信息学奥林匹克联赛初赛试题(2009)
(普及组C++语言二小时完成)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一.单项选择题(共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)WindowsB)LinuxC)OS/2D)WPS
7、关于互联网,下面的说法哪一个是正确的:
A)新一代互联网使用的IPv6标准是IPv5标准的升级与补充。
B)互联网的入网主机如果有了域名就不再需要IP地址。
C)互联网的基础协议为TCP/IP协议。
D)互联网上所有可下载的软件及数据资源都是可以合法免费使用的。
8、关于HTML下面哪种说法是正确的:
A)HTML实现了文本、图形、声音乃至视频信息的统一编码。
B)HTML全称为超文本标记语言。
C)网上广泛使用的Flash动画都是由HTML编写的。
D)HTML也是一种高级程序设计语言。
9、关于程序设计语言,下面哪个说法是正确的:
A)加了注释的程序一般会比同样的没有加注释的程序运行速度慢。
B)高级语言开发的程序不能使用在低层次的硬件系统如:
自控机床或低端手机上。
C)高级语言相对于低级语言更容易实现跨平台的移植。
D)以上说法都不对。
10、已知大写字母A的ASCII编码为65(10进制),则大写字母J的10进制ASCII编码为:
A)71B)72C)73D)以上都不是
11、十进制小数125.125对应的8进制数是
A)100.1B)175.175C)175.1D)100.175
12、有六个元素FEDCBA从左至右依次顺序进栈,在进栈过程中会有元素被弹出栈。
问下列哪一个不可能是合法的出栈序列?
A)EDCFABB)DECABFC)CDFEBAD)BCDAEF
13、表达式a*(b+c)-d的后缀表达式是:
A)abcd*+-B)abc+*d-C)abc*+d-D)-+*abcd
14、一个包含n个分支结点(非叶结点)的非空二叉树,它的叶结点数目最多为:
A)2n+1B)2n-1C)n-1D)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)nB)n+1C)n-1D)n*(n-1)
19、全国信息学奥林匹克的官方网站为参与信息学竞赛的老师同学们提供相关的信息和资源,请问全国信息学奥林匹克官方网站的网址是:
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.
#include
usingnamespacestd;
inta,b;
intwork(inta,intb){
if(a%b)
returnwork(b,a%b);
returnb;
}
intmain(){
cin>>a>>b;
cout<return0;
}
输入:
2012
输出:
_______
2.
#include
usingnamespacestd;
intmain()
{
inta[3],b[3];
inti,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<return0;
}
输入:
235
输出:
_______
3.
#include
usingnamespacestd;
constintc=2009;
intmain()
{
intn,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<
return0;
}
输入:
112
输出:
4.
#include
usingnamespacestd;
constintmaxn=50;
voidgetnext(charstr[])
{
intl=strlen(str),i,j,k,temp;
k=l-2;
while(k>=0&&str[k]>str[k+1])k--;
i=k+1;
while(istr[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
if(str[j]>str[j+1])
{
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
return;
}
intmain()
{
chara[maxn];
intn;
cin>>a>>n;
while(n>0)
{
getnext(a);
n--;
}
cout<return0;
}
输入:
NOIP3
输出:
四.完善程序(前8空,每空3分,后2空,每空2分,共28分)
1.(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。
请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。
例如数列为4,-5,3,2,4时,输出9和3;数列为123-5078时,输出16和7。
#include
usingnamespacestd;
inta[101];
intn,i,ans,len,tmp,beg;
intmain(){
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<return0;
}
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。
#include
usingnamespacestd;
intn,m,k,ans;
inthash[5][5];
voidwork(intx,inty,inttot){
inti,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&&ifor(j=y-1;j<=y+1;j++)
if(j>=0&&j②;
③;
for(i=x-1;i<=x+1;i++)
if(i>=0&&ifor(j=y-1;j<=y+1;j++)
if(j>=0&&j④;
y++;
if(y==m){
x++;
y=0;
}
if(x==n)
return;
}
while
(1);
}
intmain(){
cin>>n>>m>>k;
ans=0;
memset(hash,0,sizeof(hash));
⑤;
cout<return0;
}
第十四届全国青少年信息学奥林匹克联赛初赛试题2008
(普及组C++语言二小时完成)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确答案.)。
1.微型计算机中,控制器的基本功能是()。
A.控制机器各个部件协调工作B.实现算术运算和逻辑运算
C.获取外部信息D.存放程序和数据
2.设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的是()。
A.(A∧B)∨(C∧D∨
A)B.((
A∧B)∨C)∧
D
C.(B∨C∨D)∧D∧AD.A∧(D∨
C)∧B
3.在下列关于图灵奖的说法中,不正确的是()。
A.图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业作出重要贡献的个人
B.图灵奖有“计算机界诺贝尔奖”之称
C.迄今为止,还没有华裔计算机科学家获此殊荣
D.图灵奖的名称取自计算机科学的先驱、英国科学家阿兰·图灵
4.计算机在工作过程中,若突然停电,()中的信息不会丢失。
A.ROM和RAMB.CPUC.ROMD.RAM
5.完全二叉树共有2*N-1个结点,则它的叶节点数是()。
A.N-1B.NC.2*ND.2N-1
6.在以下各项中,()不是操作系统软件。
A.SolarisB.LinuxC.WindowsVistaD.Sybase
7.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,f,e,c,a,则栈S的容量至少应该是()。
A.6B.5C.4D.3
8.与十进制数28.5625相等的四进制数是()。
A.123.21B.131.22C.130.22D.130.21
9.设字符串S=”Olympic”,S的非空子串的数目是()。
A.28B.29C.16D.17
10.Web2.0是近年来互联网的热门概念之一,其核心思想是互动与分享。
下列网站中,()是典型的Web2.0应用。
A.SinaB.FlickrC.YahooD.Google
11.递归过程或函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。
A.队列B.多维数组C.线性表D.栈
12.(2008)10+(5B)16的结果是()。
13.二叉树T,已知其先根遍历是1243576(数字为结点的编号,以下同),中根遍历是2415736,则该二叉树的后根遍历是()。
A.4257631B.4275631
C.7425631D.4276531
14.将数组{8,23,4,16,77,-5,53,100}中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换()次。
A.4B.5C.6D.7
15.对有序数组{5,13,19,21,37,56,64,75,88,92,100}进行二分查找,成功查找元素19的查找长度(比较次数)是()。
A.1B.2C.3D.4
16.面向对象程序设计(Object-OrientedProgramming)是一种程序设计的方法论,它将对象作为程序的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。
下面关于面向对象程序设计的说法中,不正确的是()。
A.面向对象程序设计通常采用自顶向下设计方法进行设计。
B.面向对象程序设计方法具有继承性(inheritance)、封装性(encapsulation)、多态性(polymorphism)等几大特点。
C.支持面向对象特性的语言称为面向对象的编程语言,目前较为流行的有C++、JAVA、C#等。
D.面向对象的程序设计的雏形来自于Simula语言,后来在SmallTalk语言的完善和标准化的过程中得到更多的扩展和对以前思想的重新注解。
至今,SmallTalk语言仍然被视为面向对象语言的基础。
17.在32*32点阵的“字库”中,汉字“北”与“京”的字模占用字节数之和是()。
A.512B.256C.384D.128
18.设T是一棵有n个顶点的树,下列说法不正确的是()。
A.T有n条边B.T是连通的
C.T是无环的D.T有n-1条边
19.下列不属于NOIP竞赛推荐使用的语言环境的是()。
A.Dev-C++B.VisualC++C.freepascalD.Lazarus
20.在C++程序中,表达式200|10的值是()
A.20B.1C.220D.202
二.问题求解(共2题,每题5分,共计10分)
1.书架上有4本不同的书A、B、C、D。
其中A和B是红皮的,C和D是黑皮的。
把这4本书摆在书架上,满足所有黑皮的书都排在一起的摆法有_____种。
满足A必须比C靠左,所有红皮的书要摆放在一起,所有黑皮的书要摆放在一起,共有______种摆法。
2.有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,则城市1到城市6的最短距离为_____________。
城市1
城市2
城市3
城市4
城市5
城市6
城市1
0
2
3
1
12
15
城市2
2
0
2
5
3
12
城市3
3
2
0
3
6
5
城市4
1
5
3
0
7
9
城市5
12
3
6
7
0
2
城市6
15
12
5
9
2
0
三.阅读程序写结果(共4题,每题8分,共计32分)
1.#include
usingnamespacestd;
intmain()
{
inti,a,b,c,d,f[4];
for(i=0;i<4;i++)cin>>f[i];
a=f[0]+f[1]+f[2]+f[3];
a=a/f[0];
b=f[0]+f[2]+f[3];
b=b/a;
c=(b*f[1]+a)/f[2];
d=f[(b/c)%4];
if(f[(a+b+c+d)%4]>f[2])
cout<else
cout<return0;
}
输入:
9192939
输出:
_______________
2.#include
usingnamespacestd;
voidfoo(inta,intb,intc)
{
if(a>b)
foo(c,a,b);
else
cout<}
intmain()
{
inta,b,c;
cin>>a>>b>>c;
foo(a,b,c);
return0;
}
输入:
312
输出:
__________
3.#include
usingnamespacestd;
voidfunc(intary[],intn)
{
inti=0,j,x;
j=n-1;
while(i{
while(i0)i++;
while(iif(ix=ary[i];
ary[i++]=ary[j];
ary[j--]=x;
}
}
}
intmain()
{
inta[20],i,m;
m=10;
for(i=0;i{
cin>>a[i];
}
func(a,m);
for(i=0;icout<cout<return0;
}
输入:
54-6-116-5922-6110
输出:
____________________________________
4.#include
#include
usingnamespacestd;
#defineMAX100
voidsolve(charfirst[],intspos_f,intepos_f,charmid[],intspos_m,intepos_m)
{
inti,root_m;
if(spos_f>epos_f)
return;
for(i=spos_m;i<=epos_m;i++)
if(first[s