不是VIP会员,不能显示答案,请在后台“我的信息” 在线升级 VIP

一、基础知识部分:(39分)

1. 1. 已知A盘上的目录和文件组织如下:(2+3=5分) 其中TP、TB、DOS、D11、D31都是子目录名。 设当前命令提示符为 A:\TB> ,请写出完成如下操作的DOS 命令: ① 在DOS运行中,没有执行过PATH命令,现要用DOS子目录中的FORMAT命令,对插入在B驱动器(5.25英寸高密)中的360KB软盘进行格式化工作,请写出相应的操作命令。 ② 交换F2.TXT与F3.DOC两个文件的内容。
答案:A:TBDOSFORMAT B:/4|A:TB>RENTPD11F2.TXT TEMP A:TB>COPYDOSD31F3.DOC TPD11F2.TXT A:TB>COPYTPD11TEMP DOSD31F3.DOC

2. 请用等号或不等号联接表示下列不同进位制数值的大小。(3分) 例如:(3)10 <(4)10 =(100)2 < ( A )16 其中圆括号外右下角的下标,表示圆括号内数的进位制。 (98.375)10 (142.3)8 (58.5)16 (1011000.0101)2
答案:(98.375)10=(142.3)8>(58.5)16=(1011000.0101)2

3. 阅读下列程序段,写出程序运行后数组元素A1,A2,…,A11中的值 。(6分) A[1]:=1; A[2]:=1 ; K:=1 ; REPEAT A[K+2]:=1 ; FOR I:=K+1 DOWNTO 2 DO A[I]:=A[I] +A[I-1 ] ; K:=K+1 ; UNTIL K>=10 ;
答案:1 10 45 120 210 252 210 120 45 10 1

4. 已知:ACK(M,N)函数的计算公式如下: (4%) N+1 M=0 ACK(M,N)= ACK(M-1,1) N=0 ACK(M-1,ACK(M,N-1) M≠0 且N≠0 请计算:ACK(1,3)、ACK(2,4)、ACK(3,3)、ACK(3,4)
答案:ACK(1,3)=5 ACK(2,4)=11 ACK(3,3)=61 ACK(3,4)=125

5. 有N×N个数据组成如下方阵:(5分) A11 A12 A13 …… A1N A21 A22 A23 …… A2N A31 A32 A33 …… A3N ………… AN1 AN2 AN3 …… ANN 并已知: Aij = Aji 现将A11 ,A21,A22 ,A31 ,A32 ,A33 ,…存储在一维数组A[1],A[2],…,A[(N*(N+1))/2] 中。 试问:任给i,j怎样求出K来,使得A[K]的值正好是Aij,请写出由i,j计算K值的表达式。
答案:IF I>=J THEN K=(2*N-I)*(I-1))/2+J ELSE K=(2*N-J)*(J-1))/2+I

6. 已知:A1,A2,……,A81 共有81个数,其中只有一个数比其它数大,要用最少的比较运算次数,把这个值大的数找出来(假设两个数比较一次能决定出大于、小于或等于这三种情况)请将以下算法补充完整:(9分) 第一步: S1 = A1 + A2 + …… + A27 S2 = A28 + A29 +……+ A54 第一次比较(S1,S2) : 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 第二次比较(S1,S2) : S1 > S2 取 K= S1 < S2 取 K= S1 = S2 取 K= 第三步: S1 = AK+1 + AK+2 + AK+3 S2 = AK+4 + AK+5 + AK+6 第三次比较(S1,S2) : S1 > S2 取 K=¬¬¬ S1 < S2 取 K= S1 = S2 取 K= 第四步: S1 = AK+1 S2 = AK+2 第四次比较(S1,S2) : S1 > S2 为最大数 S1 < S2 为最大数, S1 = S2 为最大数。
答案:第二次比较(S1,S2): S1>S2 取K=K+0 S1<S2 取K=K+9 S1=S2 取K=K+18 第三次比较(S1,S2): S1>S2 取K=K+0 S1<S2 取K=K+3 S1=S2 取K=K+6 第四次比较(S1,S2): S1>S2 AK+1 为最大

7. 下面是一个利用完全二叉树特性,用顺序表来存储的一棵二叉树,结点数据为字符型(结点层次号从小到大,同一层从左到右顺序存储,#表示空结点,@表示存储数据结束)。 现要求画出对应该存储结构的二叉树示意图。(7分) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C # # D E # # # # # G F @
答案:

二、根据题目要求,完善程序:(61分)

1. 21分(3+4+3+3+4+4)
积木游戏:设有n 个小木块排成一排,如下图:

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

即相同颜色的木块排列在一起,设计一个翻看与交换的方案,使得用最少的交换次数实现上面的要求。
[算法描述] 翻看小木块时,可以从两端进行。例如,设中间状态如下:

此时,可以从两个方向看,即从A或B处开始:
(1)若看A则有三种可能性:
为红色,则不用交换
为兰色,交换一次,即A与B交换
为黄色,交换两次,即C与B交换一次,然后A与C再交换一次
此时,平均交换次数为1。
(2)若看B,也有三种可能性:
为兰色,则不用交换
为红色,交换一次,即B与A交换。
为黄色,交换一次,即B与C交换。
此时,平均交换次数为2/3。
由此可见,从B处翻看直到游戏结束,次数最少符合题目要求。

 
     PROGRAM EXP1(INPUT,OUTPUT)
         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; B:=N  ; Y:=N;
     WHILE  R<=B  DO
       IF  A[B]=0 THEN BEGIN
                              TEM:=A[R];  A[R]:=A[B];
                              A[B]:=TEM;   R:=R+1
                             END
       ELSE IF A[B]=1 THEN BEGIN
                                   TEM:=A[B];  A[B]:=A[Y];
                                   A[Y]:=TEM;  Y:=Y-1 ; B:=B-1  ;
                                  END
             ELSE B:=B-1
        FOR I:=1 TO N DO WRITE(A[I]:3)
END.

2. (20分,每空4分)
4色问题。 设有下列形状的图形:(N=8),其编号为1,2,……,N。

图形之间的相邻关系用下面的邻接矩阵表示:

其中:1——相邻,0——不相邻。
[程序要求] 将上面图形的每一个部分涂上红(1),黄(2),蓝(3),绿(4)四种颜色之一,要求相邻的部分有不同颜色。
输入方式:邻接矩阵。
输出方式:区域、颜色。
…………
[算法描述] 用数组R:ARRAY[1..N,1..N] OF 0..1表示相邻关系,S:ARRAY[1..N] OF INTEGER 表示颜色。
采用回溯的方法,首先给第一个图形涂上红色(1),然后在下面的图形中依次涂上其他颜色,当有矛盾时回溯解决。

        PROGRAM EXP2(INPUT,OUTPUT);
     CONST N=8;
     VAR I,J,K:INTEGER;
             R:ARRAY[1..N,1..N] OF 0..1;
             S:ARRAY[1..N]  OF INTEGER;
     BEGIN
        FOR I:=1 TO N DO
          BEGIN
             FOR J:=1 TO N DO READ(R[I,J]); READLN
          END;
             S[1]:=1   ;I:=2; J:=1;
        WHILE I<=N DO
           BEGIN
              WHILE (J<=4) AND (I<=N) DO
                 BEGIN
                     K:=1;
                     WHILE   (K<I)AND(S[K]*R[I,J])<>J    DO 
                         K:=K+1;
                         IF K<I THEN    J:=J+1      
                               ELSE BEGIN
                                       S[I]:=J     ;   I:=I+1; J:=1
                                     END
                  END;
             IF J>4 THEN BEGIN 
                           I:=I-1;   J:=S[I]+1  ;  
                         END;
           END;
        FOR I:=1 TO N DO WRITELN(I,'?',S[I])
     END.

3. 多项式加法运算(20分,每空4分)
一个仅含有x的多项式可以用下列的方式表示:
(系数,指数),(系数,指数),…,(0,0)。
其中(0,0)作为结束标志。
例如:P(x)=4x^6-3x^3+2x^2-1
可表示为:(4,6),(-3,3),(2,2),(-1,0),(0,0)
Q(x)=x^4-x+1
可表示为:(1,4),(-1,1),(1,0),(0,0)
当用上面的方式给出2个多项式之后,编制程序对这两个多项式进行加法运算,结果也用上面的方式给出。
例如:上面的P(x)和Q(x)相加的结果为:
4x^6+x^4-3x^3+2x^2-x
表示结果为:(4,6),(1,4),(-3,3),(2,2),(-1,1),(0,0)
[算法描述] 多项式可用数组P表示;分别以p1表示P,p2表示Q,p3表示结果。
处理的过程为将P复制到p3,然后逐项检查Q,当发现有相同的方次时,进行系数相加;当发现没有相同方次时,插入到p3中去。

    PROGRAM EXP3(INPUT,OUTPUT)
     VAR 
       X,Y,I,I1,J,J1,J2:INTEGER;
       P1,P2,P3     :ARRAY[1..20,1..2] OF INTEGER
     BEGIN
       J1:=0;  WRITE('INPUT P(X)=');  READ(X,Y);
       WHILE X<>0 DO 
           BEGIN
          J1:=J1+1; P1[J1,1]:=X; P1[J1,2]:=Y; READ(X,Y)
               END;
       J1:=J1+1; P1[J1,1]:=0; P1[J1,2]:=0;
       WRITE('INPUT Q(X)=');  READ(X,Y);   J2:=0; 
       WHILE X<>0 DO 
          BEGIN
            J2:=J2+1; P2[J2,1]:=X; P2[J2,2]:=Y;  READ(X,Y)
          END;
       J2:=J2+1; P2[J2,1]:=0; P2[J2,2]:=0;
       FOR I:=1 TO J1 DO 
          BEGIN
             P3[I,1]:=P1[I,1]; P3[I,2]:=P1[I,2]
          END;
         I:=1;
         WHILE    P2[I,1]<>0    DO
           BEGIN
              IF   P2[I,1]>P3[1,2]    THEN 
                   BEGIN
                      FOR J:=J1 DOWN TO 1 DO
                         BEGIN
                            P3[J+1,1]:=P3[J,1];    P3[J+1,2]:=P3[J,2]
                         END;
                      P3[I,1]:=P2[I,1]; P3[I,2]:=P2[I,2]; J1:=J1+1
                   END
                ELSE BEGIN
                        I1:=1;
                        WHILE P2[I,2]<P3[I1,2] DO 
                             I1:=I1+1   ;
                           IF P2[I,2]=P3[I1,2] THEN
                              P3[I1,1]:= P3[I1,1]+P2[I,1]    ;
                            ELSE BEGIN
                               FOR J:=J1 DOWNTO I1 DO 
                                  BEGIN
                                     P3[J+1,1]:=P3[J,1];   P3[J+1,2]:=P3[J,2]
                                  END;
                                P3[I1,1]:=P2[I,1]; P3[I1,2]:=P2[I,2];
                                  J1:=J1+1   ;      
                            END;
                      END;
                   I:=I+1
            END;
            FOR J:=1 TO J1-2 DO WRITE ('(',P3[J,1],',',P3[J,2],'),');
            WRITELN('(',P3[J+1,1],',',P3[J+1,2],')');
       END.