第八届全国青少年信息学奥林匹克联赛(NOIP2002)初赛试题
(提高组 PASCAL语言 二小时完成)
审定:全国青少年信息学奥林匹克竞赛科学委员会
主管:中国科协、教育部
主办:中国计算机学会
承办:江苏省科协青少年科技中心
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一. 选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题1.5分,多选无分,共30分)
1. 微型计算机的问世是由于(  )的出现。
A)中小规模集成电路  B)晶体管电路  C)(超)大规模集成电路  D)电子管电路
2. 中央处理器(CPU)能访问的最大存储器容量取决于(  )。
A)地址总线  B)数据总线  C)控制总线  D)实际内存容量
3. 十进制书11/128可用二进制数码序列表示为:(  )。
A)1011/1000000  B)1011/100000000  C)0.001011  D)0.0001011
4. 算式(2047)10 -(3FF)16 +(2000)8的结果是(  )。
    A)(2048)10  B)(2049)10  C)(3746)8  D)(1AF7)16
5. 已知x =(0.1011010)2 ,则[ x / 2 ]补 =(  )2 。
    A)0.1011101  B)11110110  C)0.0101101  D)0.100110
6. IPv4地址是由(  )位二进制数码表示的。
    A)16  B)32  C)24  D)8
7. 计算机病毒传染的必要条件是:(  )。
    A)在内存中运行病毒程序                B)对磁盘进行读写操作
C)在内存中运行含有病毒的可执行的程序  D)复制文件
8. 在磁盘上建立子目录有许多优点,下列描述中不属于建立子目录优点的是(  )。
    A)便于文件管理      B)解决根目录中目录项个数有限问题
C)加快文件查找速度  D)节省磁盘使用空间
9. 在使用E-mail前,需要对Outlook进行设置,其中ISP接收电子邮件的服务器称为(  )服务器。
    A)POP3  B)SMTP  C)DNS  D)FTP
10.多媒体计算机是指(  )计算机。
A)专供家庭使用的      B)装有CD-ROM的
C)连接在网络上的高级  D)具有处理文字、图形、声音、影像等信息的
11.微型计算机中,(  )的存取速度最快。
A)高速缓存  B)外存储器  C)寄存器  D)内存储器
12.资源管理器的目录前图标中增加“+”号,这个符号的意思是(  )。
A)该目录下的子目录已经展开  B)该目录下还有子目录未展开
C)该目录下没有子目录        D)该目录为空目录
13.在WORD文档编辑中实现图文混合排版时,关于文本框的下列叙述正确的是(  )。
A)文本框中的图形没有办法和文档中输入文字叠加在一起,只能在文档的不同位置
B)文本框中的图形不可以衬于文档中输入的文字的下方
C)通过文本框,可以实现图形和文档中输入的文字的叠加,也可以实现文字环绕
D)将图形放入文本框后,文档中输入的文字不能环绕图形
14.一个向量第一个元素的存储地址是100,每个元素的长度是2,则地5个元素的地址是(  )。
A)110  B)108  C)100  D)109
15.已知A = 35H,A /\ 05H \/ A /\ 30H 的结果是:(  )。
A)30H  B)05H  C)35H  D)53H
16.设有一个含有13个元素的Hash表(0 ~ 12),Hash函数是:H(key)= key % 13,,其中%是求余数运算。用线性探查法解决冲突,则对于序列(2、8、31、20、19、18、53、27),18应放在第(  )号格中。
    A)5  B)9  C)4  D)0
17.按照二叉数的定义,具有3个结点的二叉树有(  )种。
    A)3  B)4  C)5  D)6
18.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(  )倍。
    A)1/2  B)1  C)2  D)4
19.要使1 ...8号格字的访问顺序为:8、2、6、5、7、3、1、4,则下图中的空格中应填入(  )。
1 2 3 4 5 6 7 8
4 6 1 -1 7 3 2
A)6  B)0  C)5  D)3
20.设栈S和队列Q的初始状态为空,元素e 1 ,e 2 ,e 3 ,e 4 ,e 5 ,e 6依次通过栈S,一个元素出栈后即进入队列Q,若出队的顺序为e 2 ,e 4 ,e 3 ,e 6 ,e 5 ,e 1 ,则栈S的容量至少应该为(  )。
    A)2  B)3  C)4  D)5
二.问题求解:(6 + 8 = 14分)
1. 在书架上放有编号为1 ,2 ,...,n的n本书。现将n本书全部取下然后再放回去,当放回去时要求每本书都不能放在原来的位置上。例如:n = 3时:
              原来位置为:1  2  3
              放回去时只能为:3  1  2  或  2  3  1  这两种
    问题:求当n = 5时满足以上条件的放法共有多少种?(不用列出每种放法)
2. 设有一棵k叉树,其中只有度为0和k两种结点,设n 0 ,n k ,分别表示度为0和度为k的结点个数,试求出n 0 和n k之间的关系(n 0 = 数学表达式,数学表达式仅含n k 、k和数字)。
三.阅读程序,写出正确的程序运行结果:(8 + 9 + 9 = 26分)
1. program Gxp1;
      var  i , n , jr , jw , jb : integer ;
           ch1          : char ;
           ch           : array[1..20] of char ;
      begin
       readln(n);
         for i:=1 to n do read(ch)  ;
         jr:=1; jw:=n; jb:=n;
         while (jr<=jw) do
           begin
             if (ch[jw]=’R’)
               then begin
                     ch1:=ch[jr] ; ch[jr]:=ch[jw] ; ch[jw]:=ch1; jr:=jr+1;
                   end
               else if ch[jw]=’W’
                    then jw:=jw-1;
                    else begin
                          ch1:=ch[jw] ; ch[jw]:=ch[jb] ; ch[jb]:=ch1; jw:=jw-1; jb:=jb-1;
                        end
           end;
          for i:=1 to n do write(ch[1])  ;
          writeln;
    end.
输入:10
      RBRBWWRBBR
输出:
2. program Gxp2;
      var  i , j , s ,sp1 : integer ;
           p        : boolean ;
           a        : array[1..10] of integer ;
      begin
        sp1:=1; a[1]:=2; j:=2;
        while sp1<10 do
          begin
            j:=j+1; p:=true;
            for i:=2 to j-1 do
              if (j mod i=0) then p:=false;
              if p then begin
       sp1:=sp1+1; a[sp1]:=j;
     end;
          end;
        j:=2; p:=true;
        while p do
          begin
            s:=1;
            for i:=1 to j do s:=s*a  ;
            s:=s+1;
            for i:=2 to s-1 do
              if s mod i=0 then p:=false;
            j:=j+1;
          end;
        writeln(s); writeln;
      end.
输出:
3. Program Gxp2
      Var   d1 , d2 , X , Min : real ;
      begin
        Min:=10000; X:=3;
        while X<15 do
          begin
            d1:=sqrt(9+(X-3)*(X-3))  ; d2:=sqrt(36+(15-X)*(15-X))  ;
            if(d1+d2)<Min then Min:=d1+d2;
            X:=x+0.001;
          end;
        writeln(Min:10:2)  ;
      end.
输出:
四.完善程序:(15 + 15 = 30分)
1. 问题描述:工厂在每天的生产中,需要一定数量的零件,同时也可以知道每天生产一个零件的生产单价。在N天的生产中,当天生产的零件可以满足当天的需要,若当天用不完,可以放到下一天去使用,但要收取每个零件的保管费,不同的天收取的费用也不相同。
    问题求解:求得一个N天的生产计划(即N天中每天应生产零件个数),使总的费用最少。
          输入:N(天数 N<=29)
                每天的需求量(N个整数)
                每天生产零件的单价(N个整数)
                每天保管零件的单价(N个整数)
          输出:每天的生产零件个数(N个整数)
    例如:当N=3时,其需要量与费用如下:
第一天 第二天 第三天
需 要 量 25 15 30
生产单价 20 30 32
保管单价 5 10 0
    生产计划的安排可以有许多方案,如下面的三种:
第一天 第二天 第三天 总的费用
25 15 30 25*20+15*30+30*32=1910
40 0 30 40*20+15*5+30*32=1835
70 0 0 70*20+45*5+30*10=1925
程序说明:
  b[n]:存放每天的需求量
  c[n]:每天生产零件的单价
  d[n]:每天保管零件的单价
  e[n]:生产计划
程序:
program exp5;
var
    i,j,n,yu,j0,j1,s : integer ;
  b,c,d,e       : array[0..30] of integer ;
begin
    readln(n);
    for i:=1 to n do readln(b,c,d);
  for i:=1 to n do e:=0;
    ①__________:=10000;  c[n+2]=0;  b[n+1]:=0  j0:=1;
  while (j0<=n) do
begin
    yu:=c[j0];  j1:=j0;  s:=b[j0];
    while ②__________ do
      begin
        ③__________  j1:=j1+1;  s:=s+b[j1];
      end;
  ④__________  j0:=j1+1;
end;
        for i:=1 to n do ⑤__________
        readln;
end.
二.问题描述:有n种基本物质(n≤10),分别记为P1,P2,……,Pn,用n种基本物质构造物质,这些物品使用在k个不同地区(k≤20),每个地区对物品提出自己的要求,这些要求用一个n位的数表示:a1a2……a n,其中:
             ai = 1表示所需物质中必须有第i种基本物质
               = -1表示所需物质中必须不能有第i种基本物质
               = 0无所谓
    问题求解:当k个不同要求给出之后,给出一种方案,指出哪些物质被使用,哪些物质不被使用。
    程序说明:数组  b[1],b[2]……b[n]  表示某种物质
                    a[1..k,1..n]        记录k个地区对物品的要求,其中:
                    a[i,j]=1           表示第i个地区对第j种物品是需要的
                    a[i,j]=0           表示第i个地区对第j种物品是无所谓的
                    a[i,j]= -1          表示第i个地区对第j种物品是不需要的
    程序:
    program gxp2;
      var
        i,j,k,n : integer ;
        p    : boolean ;
        b    : array[0..20] of 0..1 ;
        a    : array[1..20,1..10] of integer ;
      begin
        readln(n,k);
        for i:=1 to k do
          begin
            for j:=1 to n do read(a[i,j])  ;
            readln;
          end;
        for i:=0 to n do b:=0;
        p:=true;
        while ①__________ do
          begin
            j:=n;
            while b[j]=1 do j:=j-1;
            ②__________
            for i:=j+1 to n do b:=0;
            ③__________
            for i:=1 to k do
              for j:=1 to n do
                if (a[i,j]=1) and (b[j]=0) or ④__________
                  then p:=true;
          end;
        if ⑤__________
          then writeln(‘找不到!’)
          else for i:=1 to n do
                if (b=1) then writeln(‘物质’,i,’需要’)
                         else writeln(‘物质’,i,’不需要’) ;
end.