信息竞赛初赛2
文章作者:admin 发布日期:2013-11-11 文章录入:admin 点击:819


    2011年宁波市第26届中小学生程序设计竞赛 小学组 初赛试题

    一、选择题(每题2分,共30分。每小题只有唯一一个正确答案)

    1.二进制数(1011101)2的值是( )

    (A)94   (B)93   (C)62   (D)61

    2.每个不同的二进制数可以表示一种颜色,赤、橙、红、绿、青、蓝、紫这7种颜色,最少需要几位二进制数来表示?  (  )

    3.以下运算结果为False的是 (  )

    (A)not (5>5)  (B) (5>=4) and (7<7)  (C)not (false)  (D) (5<4) or (5>=5)

    4.Pascal源程序的扩展民是  (  )

    (A) p  (B) psc   (C)pas  (D)pascal

    5.计算机的中央处理器的组成部件是(  )

    (A)控制器和存储器     (B)存储器和运算器 

    (C)控制器和运算器  (D)控制器、存储器和运算器

    6.宁波市中小学程序设计竞赛自从首届举办以来,除了其中有一届因举办时间从下半年调整到次年的上半年而没有举行外,每年举办一次。首届宁波市中小学程序设计竞赛是哪一年举办的?

    (A)1984年   (B) 1985年   (C)1986年    (D)1987年

    7.已知一维数组定义a:array[1..100]of  longint;每个元素占4个字节地址。已知a[1]的开始地址为第10000个字节处,问a[11]的开始地址是第几个字节:(   )

    8.在宁波市中小学生程序设计竞赛上机复赛中,阅卷老师会批改以下的哪些(个)文件(  )

    (A)先批改选手的源程序文件,如果找不到会批改可执行文件

    (B)先批改选手的可执行文件,如果找不到会批改源程序文件

    (C)只批改选手编译生成的可执行文件

    (D)只批改选手的源程序文件

    9.以下哪些(个)行为是不符合青少年网络文明公约的:(  )

    (A)相信绝大多数的网友是真诚的,随意与网友约会

    (B)沉溺于网络游戏,影响学习

    (C)上电脑课时下载大量迷幻类、穿越类的小说,以便晚上睡觉躲被窝看

    (D)以上都是

    10.在Free Pascal编程时,你写了一下的程序 (   )

       var n:longint;

       begin

    assign(input,’a,txt’);reset(input);//输入文件重定向到a.txt文件

    

read(n);

    close(input);//关闭输入文件

       end.

    运行该程序时,返回如右图所示的错误信息,这是由于

    (A)    当前目录下找不到输入文件“a.txt”

    (B)    源程序存在2号语法错误

    (C)    输入的值与变量n不匹配

    (D)    Pascal编译器没有正确安装

    11.有以下的程序:

      var s:string;

      begin

    readln(s);

    writeln(s[1]);

      end.

    该程序运行时,输入如下的”ABC”后按回车键,输出为 (   )

    (A) 1  (B)字符‘A’  (C)字符‘A’的ASCII码65   (D)字符串”ABC”

    12.宁波市程序设计竞赛使用的Free Pascal2.0.4中integer型数据的是表示范围是(  )

    (A)-32768~32767  (B)约正负21亿之间  (C)0~65536  (D)不一定

    13.在Pascal程序中,以下变量名称正确的是 (  )

    (A)begin  (B)2011xx  (C)hello  (D)array

    14.以下程序段结构,总体上看是属于哪个基本结构(  )

      for i:=1 to do

    if i mod 2=0 then s:=s+1;

    (A)顺序结构   (B)循环结构  (C)选择结构  (D)树型结构

    15.进行在线游戏时,①用户登录;②进入在线游戏网;③选择游戏伙伴、开始游戏;④选择游戏室。正确的次序是 (   )

    (A)①②④③  (B)②①④③  (C)①②③④  (D)②①③④

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

    1.有三个正整数x,y和z,它们相加之和等于21,且x≤y≤z。显然x=1,y=1,z=19是一组解,x=5,y=6,z=10是另一组解。请问共有几组解呢?


    0


    0


    1


    0


    0


    0


    1


    0


    1


    0


    0


    1


    1


    0


    1


    1


     

     

     

    2.在四行四列的表格中放有16枚硬币(每格1枚硬币),以1表示正面朝上,0表示反面朝上。一次翻硬币是指,要么把某一行整行反转,要么把某一列整列反转。某一行或某一列反转后,这一行上原来正面朝上的全变反面朝上,原来反面朝上的全变为正面朝上了。

    原来的硬币状态如右图所示(图中有7枚硬币正面朝上,9枚硬币反面朝上),经若干次整行、整列的翻转后,右图中最多可以使多少枚硬币正面朝上?使最多枚硬币正面朝上时最少需要翻几次?

     

     

     

    三.阅读程序,求程序运行输出结果(每题8分,共32分)

    第1题:

    program xx2011_1;

    var n,i,c:longint;ave,s:extended;

    

    输入:

    5

    73        76  83  91  77

    输出:

       f:array[1..10000]of longint;

    begin

      read(n);ave:=0;

      for i:=1 to n do begin

         read(f[i]);

         ave:=ave+f[i];

     end;

     ave:=ave/n;c:=0;

     for i:=1 to n do

       if f[i]<ave then c:=c+1;

     writeln(ave:0:2,’ ‘,c);

    end.

     

     

    第2题:

    program xx2011_2;

    

    输入:

    15        2

    输出:

    var n,i,x,p,s:longint;

    begin

      read(n,x);

      s:=0;p:=1;

      for i:=1 to n do begin

         p:=p*x;

         s:=s+p;

      end;

      writeln(s);

    end.

     

     

    第3题:

    program xx2011_3;

    const maxn=100000;

    var

    f:array[1..maxn]of longint;

    stack:array[1..maxn,1..2]of longint;

    n,i,j,h,t,last,x,s:longint;

    begin

     read(n);

     for i:=1 to n do read(f[i]);

     stack[1,1]:=1;

     stack[1,2]:=n;

     last:=2;

     while last>1 do begin

       last:=last-1;

       h:=stack[last,1];

       t:=stack[last,2];

       i:=h;

       j:=t;

       x:=f[h];

       while i<j do begin

         while(i<j)and(f[j]<x) do j:=j-1;

         if i<j then begin

            f[i]:=f[j];

            i:=i+1;

         end;

         while (i<j)and(f[i]>x) do i:=i+1;

         if i<j then begin

           f[j]:=f[i];j:=j-1;

         end;

       end;

       f[i]:=x;

       if(h<i-1) then begin

         stack[last,1]:=h; stack[last,2]:=i-1;last:=last+1;

         end;

       if(i+1<t) then begin

        stack[last,1]:=i+1;stack[last,2]:=t;last:=last+1;

        end;

     end;

    s:=f[2]-f[1];

    for i:=3 to n do s:=s+f[i]-f[i-1];

    

    输入2:

    10

    40  36  47  29  25  35  22  42  13  58

    输出:

    

    输入1:

    3

    20  10  30

    输出:

      writeln(s);

    end.

     

     

     

     

     

    第4题

    program xx2011_4;

    var

    n,a,b,c,d:longint;

    procedure matric(var a,b,c,d:longint;n:longint);

    var a1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3:longint;

    begin

     if n=1 then begin a:=0;b:=1;c:=1;d:=1;exit;end;

     matric(a1,b1,c1,d1,n div 2);

     matric(a2,b2,c2,d2,n div 2);

     a3:=a1*a2+b1*c2;

     b3:=a1*b2+b1*d2;

     c3:=c1*a2+d1*c2;

     d3:=c1*b2+d1*d2;

     if n mod 2=1 then begin

        a:=b3;b:=a3+b3;c:=d3;d:=c3+d3;

        end

       else begin

       a:=a3;b:=b3;c:=c3;d:=d3;

       end;

     end;

     begin

     read(n);

      if n<3 then writeln(1)

    

    输入2:

    7

    输出:

    

    输入1:

    3

    输出:

        else begin

          matric(a,b,c,d,n-2);

          writeln(c+d);

        end;

     end.

     

     

    四.程序填空(前5空每空2分,后6空每空3分,共28分)

    第1题:幻方

    

把1至n×n的正整数填在n行n列的表格内,使每一行、每一列和二条多角线上n个数之和都相等。这样的正方形表格叫做幻方。如右图所示是一个3行3列的幻方。

    下面的程序生成一个行(列)数为奇数的幻方。如果输入的行列数n是偶数,输出字符串”not odd number!”,否则按一下的方法生成幻方:

    1.       第一个数1填入第一行最中间的一列;

    2.       以后每次填下一个数时,填入的位置为:

    (1)     如果已填的数的个数为n的倍数,则填入下一行;

    (2)     否则填入上一行右一列。如果向上越界,则填至最后一行;如果向右越界,填至第一列。生成的数字保存在二维数组a中,程序输出n行,每行n个数据。

    【样例输入】

    3

    【样例输出】

    8         1  6

    3         5  7

    4         9  2

    请将程序补充完整。

    program xx2011_5;

    const maxn=1001;

    var n,i,j,p:longint;

       a:array[1..maxn,1..maxn]of longint;

    begin

      readln(n);

      if n mod 2=0 then begin

         wrtieln(‘not odd number!’);

                               ;

     end;

     i:=1;

                            ;

     for p:=1 to n*n do begin

    a[i,j]:=p;

    if                    then i:=i+1

      else begin

       i:=i-1;j:=j+1;

       if                 then  i:=n;

       if j>n  then  j:=1;

     end;

    end;

    for i:=1 to n do begin

       for j:=1 to n-1 do

          write(a[i,j],’ ‘);

                           ;

      end;

    end.

    第2题:完美覆盖

    

以1×2的多米诺骨牌去覆盖n×m的棋盘,当棋盘中的每一格都刚好被一块多米诺骨牌覆盖时,这种覆盖叫多米诺骨牌的完美覆盖。如下图所示,2行3列的棋盘,有3种完美覆盖方案。

     

     

     

    以下程序求得n×m棋盘的完美覆盖总方案数。程序从第1行第1列开始,按照1行1列、1行2列、1行3列、…、1行m列、2行1列、2行2列、2行3列、…、2行m列、…n行1列、n行2列、n行3列、…、n行m列的次序,逐格尝试各格子的不同覆盖方案。以f[i,j]=0表示第i行j列格子还没有被覆盖,以f[i,j]=1表示第i行j列格子被横向覆盖,以f[i,j]=2表示第i行j列格子被纵向覆盖,覆盖的总方案数在变量ans中求得。

    请将程序补充完整。

    program xx2011_6;

    const maxn=100;maxm=100;

    var

    n,m,i,j:longint;

    ans:extended;

    f:array[1..maxn,1..maxm]of longint;

     

    procedure domino(i,j:longint);

    begin

      if i>n then begin

                         ;

        exit;

      end;

      if                 then

          begin

          if j<m then

            domino(i,j+1)

          else

            domino(               );

          end

        else

           begin

           if           then

                        begin

                        f[i,j]:=1;

                        f[i,j+1]:=1;

                        if j<m then

                          domino(i,j+1)

                        else

                          domino(              );

                        f[i,j]:=0;f[i,j+1]:=0;

                        end;

           if               then

                        begin

                        f[i,j]:=2;

                        f[i+1,j]:=2;

                        if j<m then

                           domino(i,j+1)

                        else

                          domino(              );

                        f[i,j]:=0;f[i+1,j]:=0;

                        end;

           end;

        end;

     

    begin

     read(n,m);

     for i:=1 to n do

       for j:=1 to m do

          f[i,j]:=0;

          ans:=0;

          domino(             );

          writeln(ans:0:0);

     end.