您当前的位置: 跳过导航链接首页 >> 教研组 >> 信息组 >> 信息学竞赛 >> 第二届全国青少年信息学(计算机)奥林匹克分区联赛初赛…
第二届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题
转抄 更新时间:2007-9-20 点击数:715
 

第二届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题

(初中组)

PASCAL 语言   竞赛用时:2小时)

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

 

一、基础知识部分:44分)

1.  已知A盘上的目录和文件组织如下:1+1+3=5%

其中TPTBDOSD11D31都是子目录名。

设当前命令提示符为 A:TB> ,请写出完成如下操作的DOS 命令:

F1.TXT 移到D31子目录中去;

删除子目录 TB

DOS运行中,没有执行过PATH命令,现要用DOS子目录中FORMAT命令,对插入在B驱动器(5.25英寸高密)中的360KB软盘进行格式化工作,请写出相应的操作命令。

 

    2.执行命令时,屏幕上显示如下出错信息:(1+1=2%

  

   WRITE  PROTECT  ERROR  WRITING  DRIVE  B

   ABORT RETRY FALL

 

请说明这是什么错误?应如何校正?

 

    3.请用等号或不等号联接表示下列不同进位制数值的大小。(3%

例如:(310 <(4)4 =(100)2 < ( A )16

其中圆括号外右下角的下标,表示圆括号内数的进位制。

2110    (15)16      (25)8   (10101)2

   

4.阅读下列程序段,写出程序段运行后变量X的值。(4%

        100 X1=3

        X1=3

        X2=8

        FOR  I=1  TO  5  DO

          BEGIN                   循环结构,应用数据轮换方式,求

            X=X1+X2*2     两个数和的2倍。

            X1=X2 X2=X

          END

         WRITELN(‘X=’,X

 

5.阅读下列程序段,写出程序运行后数组元素A1A2,…,A11中的值。(6%

        A[1]=1

            A[2]=1 K=1

            REPEAT

               A[K+2]=1

               FOR  I=K  DOWNTO  2  DO 

                  A[I]=A[I] +A[I-1 ]

              K=K+1

UNTIL  K>=10 

 

    6.已知:ACKMN)函数的计算公式如下: 4%

                      N+1                         M=0

        ACKMN=    ACKM-11              N=0

                          ACKM-1ACKMN-1   M0 N0

 

请计算:ACK12)与ACK22)的值。

 

7.请写出对应计算如下算式的程序段:(4%

   Y=ANXN+AN-1XN-1+……A1X+A0

 

    8.有N×N个数据组成如下方阵:(7%

          A11      A12   A13   ……      A1N

 A21    A22     A23    ……      A2N

 A31     A32    A33  ……      A3N

 …………

 AN1    AN2    AN3  ……      ANN

并已知: Aij = Aji 

现将A11 A21A22 A31 A32 A33 …存储在一维数组A[1]A[2],…A[N*N+1))/2] 中。

试问:任给ij怎样求出K来,使得A[K]的值正好是Aij,请写出由ij计算K值的表达式。

 

9.已知:A1A2,……,A81 共有81个数,其中只有一个数比其它数大,要用最少的比较运算次数,把这个值大的数找出来(假设两个数比较一次能决定出大于、小于或等于这三种情况)请将以下算法补充完整:(9%

   第一步: S1 = A1 + A2 + …… + A27

            S2 = A28 + A29 +……+ A54

        第一次比较(S1S2

             S1 > S2       K=0

             S1 < S2       K=27

             S1 = S2       K=54

       第二步:  S1 = AK+1 + AK+2 + …… + AK+9

            S2 = AK+10 + AK+11 +……+ AK+18

        第二次比较(S1S2

            S1 > S2       K=    

            S1 < S2       K=    

            S1 = S2       K=    

       第三步: S1 = AK+1 + AK+2 + AK+3

            S2 = AK+4 + AK+5 + AK+6

        第三次比较(S1S2

            S1 > S2       K=­­­     

            S1 < S2       K=     

            S1 = S2       K=     

       第四步: S1 = AK+1

            S2 = AK+2

        第四次比较(S1S2

            S1 > S2               为最大数

            S1 < S2               为最大数,

            S1 = S2               为最大数。

 

二、根据题目要求,补充完善以下程序:56分)

    1[   ]        15分(每空5分)

设有N个不同整数的数列:例如N=4时,有4个不同整数的数列为174165。数列中的第1个数17,比它后面的三个数都大,则称数17的逆数为3。数列中的第2个数4比它后面的数都小,则称数4的逆数为0。同时记数列中全部逆数的和称为数列的逆数。上例中,数列174165的逆数:为3+0+1+0=4

 

[程序要求]  当给出N个不同整数的数列后,求出此数列的逆数。

   

[算法描述]  为求得上面问题的解,设置数组A:array[1..N] of Integer 和逆数计数器5,然后用一个二重循环求出数列的逆数。

 

[    ]

    Const N=10;

Var i,j,s:integer;

   A:array[1..N] of integer;

Begin

  S:=0;

  For I:=1 to n do read(a[I]);

  For I:=1 to     1     do

    For j:=     2     to n do

      If a[I]>a[j] then     3    ;

  Writeln('s=',s)

End.

 

    2[    ]          20分(每空4分)

装球:设有n个盒子(n足够大,可装入任何数量的球),分别编号12,……。同时有k个小球(k>0),今将k 个小球装入到盒子中去。

装入规则如下:

(1)第一个盒子不能为空。

(2)装入必须严格按递增顺序进行。

     例如,当k=8n=6时,装入方法有125134

(3)在满足上面的两个条件下,要求有球的盒子尽可能多。

(4)装完后,相邻盒子中球个数差的绝对值之和最小(未装的盒子不计)。

如上例中:

  装入法125,则差的绝对值之和为2-1+5-2=4

  装入法134,则差的绝对值之和为3-1+4-3=3

 

[程序要求]  给出kk表示小球的个数)之后,求出满足上述四个条件的装入方法。

 

[算法描述]  设计一个数组A用数组元素代表盒子,然后依次装入小球。

 

[程序清单]

Const n=20;

Var i,j,k,l:integer;

   A:array[1..n] of integer;

Begin

  Readln(k);

       1     ;

  j:=1;

  while      2      do begin

    a[j]:=j;      3     ; j:=j+1

  end;

  l:=j-1;

  while k>0 do begin

         4     ;

    k:=k-1;

    l:=l-1;

  end;

  for I:=1 to      5      do

    write(a[I]:4)

end.

 

3[    ]              21分(3+4+3+3+4+4

积木游戏:设有n 个小木块排成一排,如下图:

               ……    

 

游戏开始时,每个小木块向下的一面涂有红、黄、蓝三种颜色之中的一种(约定:0表示红色,1表示黄色,2表示兰色)。要求通过翻看与交换方式对小木块重新排列(翻看的规则为每个小木快只能看一次),最终成为下面的形状:

 

         ……                   ……                  ……    

                                                   

 

即相同颜色的木块排列在一起,设计一个翻看与交换的方案,使得用最少的交换次数实现上面的要求。

[算法描述]  翻看小木块时,可以从两端进行。

例如,设中间状态如下:

         ……      A       …… B            …… C           ……   

                    未翻过                                 

此时,可以从两个方向看,即从AB处开始:

1)若看A则有三种可能性:

为红色,则不用交换

为兰色,交换一次,即AB交换

为黄色,交换两次,即CB交换一次,然后AC再交换一次

此时,平均交换次数为1

 

2)若看B,也有三种可能性:

为兰色,则不用交换

为红色,交换一次,即BA交换。

为黄色,交换一次,即BC交换。

此时,平均交换次数为2/3

由此可见,从B处翻看直到游戏结束,次数最少符合题目要求。

 

[   ]     

Const n=20;

Var i,tem,r,b,y:integer;

           a:array[1..n] of 0..2;

Begin

  For i:=1 to n do read(a[i]);

  r:=1;      1      ; y:=n;

  while      2      do

if      3      then begin

 tem:=a[r];a[r]:=a[b];a[b]:=tem;

 r:=r+1

end

else if      4      then begin

  tem:=a[b];a[b]:=a[y];a[y]:=tem;

       5     ;      6     ;

end

else b:=b=1

  for I:=1 to n do write(a[I]:3)

end.

 

文章录入:xinxijyz       责任编辑:xinxijyz
|||
    笔名:
    评论:
    【注】 发表评论必需遵守以下条例:
    • 遵守中华人民共和国的各项有关法律法规
    • 承担一切因您的行为而导致的法律责任
    • 本站管理员有权保留或删除任意留言内容
    • 本站有权在网站内转载或引用您的评论
    • 参与本评论即表明您已阅读并接受上述条款