第十二届全国青少年信息学奥林匹克联赛初赛试题

 提高 C+  二小时完 

OIFans.cn整理收集

 

●●    部试答案均要求写在答卷纸上,写在试卷纸上一律无    ●●

 

 

 

 单项选择  10 题,每 1.5 分,共 15 分。每题有且仅有一个正确答.

 

 

1. 在以下项中     CPU 组成部分。

A. 控制      B.       C. 寄存      D. ALU      E. RAM

 

 

2. BIOS基本输入输系统)是一固化在计算        ROM 片上的程序。

A. 控制      B. CPU       C.        D. 内存    E. 硬盘

 

 

3.在下面世界顶级的项中为计机科学与技领域做出杰贡献的科学设立的奖项          

A.         B.  诺贝尔          C. 菲尔兹奖

D.          E.  南丁格尔奖

 

 

4在编程(使用任一高级语言一定 C++如果需要磁盘文件中入一个很大二维数组

(例 1000*1000 double 型数,按行读(即外层循环关于行的)按列读(即层循环是 关于列的)比,在输入率上

A. 没有区                 B. 一些区别,机器处理速很快,可忽不计

C. 按行读的方式要高       D. 按列读的方要高一        E. 取决于数组的存储式。

 

 

5 C++ 中,表达 21^2 的值是    

 

A. 441       B. 42       C.23      D.24       E.25

 

 

6 C++ 中,判 a 0 b 不等 0 的正的条件表达      

 

A. !a==0 || !b==0  B. !((a==0)&&(b==0))         C. !(a==0&&b==0) D. a!=0 || b!=0 E. a && b

 

7.某呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从 这一时刻开始的出入记录为“进,出进,进,进出,出,进进,进,,。假设辆入站的 顺序 123,……则车辆出站顺序为    

 

A. 1, 2, 3, 4, 5         B. 1, 2, 4, 5, 7         C. 1, 4, 3, 7, 6

 

D. 1, 4, 3, 7, 2         E. 1, 4, 3, 7, 5

 

 

8.高度 n 的均衡的二树是指:如去掉叶结点相应的树枝它应该是高 n-1 二叉树。

在这里,树等于叶结点最大深度,结点的深0,如果某个均衡的二树共2381 个结点, 则该树的树    

A. 10      B. 11       C. 12      D. 13       E. 210 1

 

 

9. 与十进 1770.625 对应的八制数是    OIFans.cn收集

 

A. 3352.5               B. 3350.5               C. 3352.1161

D. 3350.1151           E.  4 个答案都不对

 

 

10 5 的序列排不论原先的序如何最少都可以通    次比较完成从小到的排序。

 

A. 6       B. 7        C. 8       D. 9        E. 10

 

 

 不定项选择  10 题,每 1.5 分,共 15 分。每题正确答案的个数大于或等 1。多选 或少选均不得分

 

 

11. A=B=D=trueC=E=false以下逻辑运表达式值为的有    )。


 

A. ( AB)(CD)  E B.

 (((AB)C)DE)

C. A(BCDE)         D. (A(BC)) DE

 

 

12.  (2010)16 + (32)8的结果是    

 

A. (8234)10                  B. (202A)16

 

C. (100000000110)2       D. (2042)16

 

 

13. 设栈S初始状态为,元素a, b, c, d, e 依次入栈,下出栈序列可能出现的    )。

 

A. a, b, c, e, d             B. b, c, a, e, d

 

C. a, e, c, b, d             D. d, c, e, b, a

 

 

14. 6 个结点的二树的先根遍 1 2 3 4 5 6(数字结点的编号以下同,后根遍历是

3 2 5 6 4 1,则该二树的可能的根遍历是      

 

A. 3 2 1 4 6 5             B. 3 2 1 5 4 6

 

C. 2 3 1 5 4 6             D. 2 3 1 4 6 5

 

 

15. 在下各数据库系软件中,以系型数据库主体结构的    

 

A. ACCESS                B. SQL Server

 

C. Oracle                D. Foxpro

 

 

16.在下列软件中, NOIP (复赛)推使用的语言境有       

 

A. gcc/g++               B. Turbo Pascal

 

C. Turbo C               D. free pascal

 

17. 以下电之后将不保存数据的      )。

A.       B. ROM       C.        D. RAM

 

 

18. 在下关于计算机言的说法中正确的有       )。

A. PascalC都是编执行的高级

B. 高级语程序比汇编言程序更容从一种计算移植到另一计算机上

C. C++史上的第一支持面向对的计算机语言

D. 高级语比汇编语言高级,是因它的程序的行效率更高

 

 

19. 在下关于计算机法的说法中正确的有       )。OIFans.cn收集

A. 一个正的算法至少有一个输入

B. 算法的进,在很大度上推动了算机科学与术的进步

C. 判断一算法的好坏主要依据它某台计算机具体实现时运行时间

D. 目前仍存在许多涉到国计民生重大课题,没有找到能在计算机上施的有效算法

 

 

20. 在下关于青少年息学竞赛的法中,你赞的是        )(本题不回0分,答一律满分

A. 举行信学竞赛的目,是为了带广大青少年科学、爱科,为造就一批优秀的计机科学 与技术人才定良好的基础

B. 如果竞优胜者不能接保送上大,我今后就再参与这项动了

C. 准备竞无非要靠题战术,为了得好成绩,得拼时间、体力

D. 为了取好成绩,不要看智力因,还要看非力因素。优选手应该有韧不拔的意,有 严谨求实的风,既要努奋进,又要不骄败不馁

 

 

三.问题求解( 2 题,每 5 分,共 10 分)

 

 

1 2006 个人分成若不相交的子,每个子集 3 个人并且:

1)在每子集中,没人认识该子的所有人。

2)同一集的任 3 人中,至 2 个人互认识。

3)对同子集中任 2 个不相识的,在该子集恰好只 1 人认识这两人。 则满足上述件的子集最能有                                        个?

 

 

2.将边长 n 的正三角 n 等分过每个分点别做另外两的平行线,到若干个正角形, 我们称为小角形。正三形的一条通是一条连续折线,起点最上面的一小三角形,点是最 下面一行位中间的小三形。在通路,只允许由个小三角形到另一个与有公共边的位于同 一行一行的小形,并且小三角形经过两次次以上( n=5 路的例 n=10,则该正三形的不同的路的总数为_          __

 

 

 

 

四.阅读程序写结果( 4 题,每 8 分,共 32 分)

 

1. #include <iostream.h>

 

void main()

 

{int i,u[4],v[4],x,y=10;

 

for(i=0;i<=3;i++)

 

cin >>u[i]; v[0]=(u[0]+u[1]+u[2]+u[3])/7; v[1]=u[0]/((u[1]-u[2])/u[3]); v[2]=u[0]*u[1]/u[2]*u[3]; v[3]=v[0]*v[1];

x=(v[0]+v[1]+2)-u[(v[3]+3)%4];

 

if(x>10)

 

y+= (v[2]*100-v[3])/(u[u[0]%3]*5);

 

else

 

y+=20+(v[2]*100-v[3])/(u[v[0]%3]*5);

 

cout <<x<<","<<y<<endl;

} //本例,给定的输数据可以避分母 0 标越界。 输入:9 3 9 4

输出:              

 

 

 

2.#include <iostream.h>

 

void main()

 

{int i,j,m[]={2,3,5,7,13};

 

long t;

 

for (i=0;i<=4;i++)

 

{t=1;

 

for(j=1;j<m[i];j++)     t*=2;

 

cout <<(t*2-1)*t<<"     ";

 

}

 

cout <<endl;

 

}OIFans.cn收集

输出:_____                 

 

 

 

3. #include "iostream.h"

 

#define N  7

 

int fun1(char s[],char a,int n)

 

{int j;

 

j=n;

 

while(a<s[j] && j>0) j--;

 

return j;

 

}

 

int fun2(char s[],char a,int n)

 

{int j;

 

j=1;

 

while(a>s[j] && j<=n) j++;

 

return j;

 

}

 

void main()

 

{char s[N+1];

 

int k,p; for(k=1;k<=N;k++) s[k]='A'+2*k+1; p=fun1(s,'M',N);

cout <<p+fun2(s,'M',N)<<endl;

 

}

输出:            

 

 

 

4. #include <iostream.h>

 

#include <iomanip.h>

 

void digit(long n,long m)

 

{if(m>0)

 

cout <<setw(2)<<n%10;

 

if(m>1)

 

digit(n/10,m/10);

 

cout <<setw(2)<<n%10;

 

}

 

void main()

 

{long x,x2;

 

cout <<"Input a number:"<<endl;

 

cin >>x;

 

x2=1;

 

while(x2<x)  x2*=10;

 

x2/=10; digit(x,x2); cout <<endl;

}

输入:9734526

输出:                               

 

 

五.完善程  ( 5 空,每 2 分, 6 空,每 3 分, 28 )

 

 

1(选排列下面程序的能是利用递方法生成 1 n(n<10) n 个数 k(1<=k<=n)个数的 全部可能的列(不一定升序输出例如, n=3k=2 时,该输出(每 5 个排OIFans.cn收集

 

12 13  21  23 32

 

31

程序:

 

#include <iostream.h>

 

#include <iomanip.h>

 

int n,k,a[10];

 

long count=0;

 

void perm2(int j)

 

{int i,p,t;

 

if(      )

 

{for(i=k;i<=n;i++)

 

{count++;

 

t=a[k]; a[k]=a[i]; a[i]=t;

 

for(      )

 

cout<<setw(1)<<a[p];

 

cout <<"  "; t=a[k];a[k]=a[i];a[i]=t; if(count%5==0) cout <<endl;

}

 

return;

 

}

 

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

 

{t=a[j];a[j]=a[i];a[i]=t;

 

   ;

 

t=a[j];       ;

 

}

 

}

 

void main()

 

{int i;

 

cout <<"nEntry n,k (k<=n)n"<<endl;

 

cin>>n>>k;

 

for(i=1;i<=n;i++)  a[i]=i;

   ;

 

cout <<endl;

 

}

 

 

2TSP 问题的交叉算子)TSP 问题(Traveling Salesman Problem)描述下:给 n 个城 构成一个完全图任何两城市之间有一个代例如路程费等构造遍历所城市环 路,每个城恰好经过一,求使总代达到最小的条环路。

遗传算法是求解该问题的一个很有效的近似算法。在该算法中,一个个体为一条环路,其编码方法 之一 1 n n 个数的一个排列每个数字为个城市的编。例如 n=5 3 4 2 1 5 表示该方案施的路线 3->4->2->1->5->3。遗算法的核心通过两个个的交叉操作产生两 个新的个体下面的程序出了最简单一种交叉算。具体过程下:

(1)选定中一段作为互段,该段的止下标 t1t2,随 t1t2 后,互换两

(2)互换在每个新的列中可能有复数字不能作为新体的编般再做两步理:

(2.1) 个互换段中共同的数字 0,表已处理完。

(2.2) 个互换段中余数字标 1,按顺将互换段外复的数字进替换。 例如:n=12,两个个体别是:

 

a1: 1 3 5 4  * 2  6 7  9  * 10 12 8 11

 

a2: 3 2 1 12 * 6 7 10 11 * 8  5  4  9

t1=5t2=8上述每一两个星间的部分为换段假定组的下标 1 开始互换后有

 

a1: 1 3 5 4  * 6 7 10 11  * 10 12 8 11

 

a2: 3 2 1 12 * 2 6  7  9  *  8  5  4  9

然后,将 6,7 对应的项标记 0,星号内 2,9,10,11 对应的项标 1并且按顺对 应关系为:10<->211<->9于是 a1[9]=10 a1[9]=2 a2[2]=2 替换 a2[2]=10类似再做 2 组替换。这处理后,就到了两个新体:

 

a1: 1  3 5  4      6 7 10 11     2 12  8  9

 

a2: 3 10 1 12  2 6  7        9   8  5  4  11

3)输出个新个体的码。 程序:

 

#include <iostream.h>

 

#include <stdlib.h>

 

#define N 20

 

int a1[N],a2[N],kz1[N],kz2[N],n;

 

int rand1(int k)

 

{int t=0;

 

while(t<2|| t>k) t=(int)((double)rand()/RAND_MAX*k); return t;

}

 

void read1(int a[],int m)

{读入数组 a[1] a[m]a[0]=0,略。}OIFans.cn收集

 

void wrt1(int a[],int m)

{输出数组 a[1] a[m],略。}

 

void cross(int a1[], int a2[],int t1, int t2, int n)

 

{int i,j,t,kj;

 

for(i=t1; i<=t2; i++)

{t=a1[i];       

 

} for(i=1;i<=n;i++) if(i<t1 || i>t2)

kz1[i]=kz2[i]=-1;

 

else

 

   ;

 

for(i=t1;i<=t2;i++) for(j=t1;j<=t2;j++) if(a1[i]==a2[j])

{      ;   break;

 

}

 

for(i=t1; i<=t2; i++)

 

if(kz1[i]==1)

 

{for(j=t1;j<=t2;j++)

 

if(kz2[j]==1)

 

{kj=j; break;

 

} for(j=1;j<=n;j++) if  )

{a1[j]=a2[kj];break;

 

}

 

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

 

if(      )

 

{a2[j]=a1[i]; break;

 

}

 

kz1[i]=kz2[kj]=0;

 

}

 

}

 

void main()

 

{int k,t1,t2;

 

cout <<"input (n>5):"<<endl;  cin>>n;

 

cout <<"input array 1 ("<<n<<" numbers):"<<endl;  read1(a1,n); cout <<"input array 2 ("<<n<<" numbers):"<<endl;  read1(a2,n); t1=rand1(n-1);

do

 

{t2=rand1(n-1);

 

}while(t1==t2);

 

if(t1>t2)

 

{k=t1; t1=t2; t2=k;

 

}

   ;

 

wrt1(a1,n);  wrt1(a2,n);

 

}