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

 

 

 提高    二小时完 

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 的值是      OIFans.cn收集

 

 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, 5OIFans.cn收集

 

 

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

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

 

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

 

 

9. 与十进 1770.625 对应的八制数是      

 

A. 3352.5              B. 3350.5                C. 3352.1161

 

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

 

 

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

 

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 ServerOIFans.cn收集

 

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. 在下关于计算机法的说法中正确的有       )。

 

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

 

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

 

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

 

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

 

 

20. 在下关于青少年息学竞赛的法中,你赞的是        )(本题不回0分,答一律满分A. 举行信学竞赛的目,是为了带广大青少年科学、爱科,为造就一批优秀的计机科学 与技术人才定良好的基础

 

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

 

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

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

 

 

 

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

 

 

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

 

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

 

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

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

 

 

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

 

 

 

 

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

 

 

 

1. #include <stdio.h>

 

int main()

 

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

 

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

 

  scanf("%d", &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)OIFans.cn收集

 

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

 

   else

 

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

 

   printf("%d,%d\n", x,y);

 

   return 0;

 

} /*注:例中,给定输入数据可避免分母 0 或下标越界 */

 

输入:9 3 9 4

 

输出:_______________

 

 

2#include <stdio.h>

 

main()

 

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

 

long t;

 

for (i=0;i<=4;i++)OIFans.cn收集

 

  {t=1;

 

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

 

   printf("%ld   ",(t*2-1)*t);

 

  } 

printf("\n");

 

}

 

输出:____________________

 

 

3#include "stdio.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)OIFans.cn收集

 

 {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);

 

  printf(%d\n,p+fun2(s,'M',N));

 

 }

 

输出:_____________

 

 

 

4.#include <stdio.h>

 

void digit(long n,long m)

 

   {if(m>0)

 

 printf("%2ld",n%10);

 

 if(m>1)

 

 digit(n/10,m/10);

 

 printf("%2ld",n%10);

 

   }

 

main()

 

  {long x,x2;

 

   printf("Input a number:\n");  scanf("%ld",&x);

 

   x2=1;

 

   while(x2<x)  x2*=10;

 

   x2/=10;OIFans.cn收集

 

   digit(x,x2);

 

   printf("\n");

 

  }

 

输入:9734526

 

输出:______________________________

 

 

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

 

 

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

 

12 13  21  23 32

 

31

 

程序:

#include <stdio.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(       )

 

  printf("%1d",a[p]);  /* "%1d"中是数 1,不是字 l */

 

   printf("  ");

 

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

 

   if(count%5==0) printf("\n");

 

   }OIFans.cn收集

 

 return;

 

   }

 

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

 

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

 

  ;

 

 t=a[j];        ;

   }

 

 }

 

main()

 

{int i;

 

  printf("\nEntry n,k (k<=n):\n");

 

  scanf("%d%d",&n,&k);

 

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

 

   ;

 

 }

 

 

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,两个个体别是:OIFans.cn收集

 

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 1* 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 <stdio.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,略。}

 

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,k,t,kj;

 

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

 

  {t=a1[i];         

 

}

 

 for(i=1;i<=n;i++)OIFans.cn收集

 

  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;

 

  }

 

main()

 

{int k,t1,t2;

 

printf("input (n>5):\n");  scanf("%d",&n);

 

printf("input array 1 (%d'numbers):\n",n);             read1(a1,n);

 

printf("input array 2 (%d'numbers):\n",n);             read1(a2,n);

 

 t1=rand1(n-1);

 

 do

 

 {t2=rand1(n-1);

 

 }while(t1==t2);

 

 if(t1>t2)

 

  {k=t1; t1=t2; t2=k;OIFans.cn收集

 

  }

 

 

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

 

}