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

 

 

 普及  Pascal     二小时完 

OIFans.cn整理收集

 

 

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

 

 

 

 

 单项选择  20 题,每 1.5 分,共 30 分。每题有且仅有一个正确答.OIFans.cn收集

 

 

1.在下面世界顶级的项中为计机科学与技领域做出杰贡献的科学设立的奖项           

 

   A.          B.    诺贝尔         C. 菲尔兹        D. 图灵奖

 

 

2. 在下列软件中,不 NOIP (复赛)推使用的语言境有        

 

A. gcc/g++                     B. Turbo Pascal

 

C. RHIDE                       D. free pascal

 

 

3. 以下断之后仍能保数据的有      )。

 

A. 寄存         B. ROM          C. RAM         D. 缓存

 

 

4Linux (     )

 

A. 绘图软       B. 程序设计语言  C. 操作系           D. 网络浏览器

 

 

5. CPU (   )的简称。

 

A.            B. 中央处理       C. 高级程序语言   D. 核心寄存器

 

 

6在计算机中,防火的作用是      

 

A. 防止火               B.防止网络攻击

 

C. 防止计机死             D. 防止使用者删除数据OIFans.cn收集

 

 

7. 在下列于计算机语的说法中,正确的是       )。

 

A. PascalC都是编执行的高级

 

B. 高级语程序比汇编言程序更容从一种计算移植到另一计算机上

 

C. C++史上的第一支持面向对的计算机语言

 

D. 与汇编言相比,高语言程序更易阅读

 

 

8. 在下列于计算机算的说法中,正确的是       )。

 

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

 

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

 

C. 判断一算法的好坏主要标准是法的时间复性与空间复

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

 

 

9. 在下列种排序算法,不是以“较”作为主操作的算法        )。

 

A. 选择排         B. 冒泡排           C. 入排           D. 基数排序

 

 

10编程使用任一语言, Pascal,如果磁盘文入一个很大二 维数组( 1000*1000 double 型数组按行读(即层循环是关行的)与按读(即外层 循环是关于的)相比,输入效率上

 

A. 没有区                  B. 按行读的方式高一些

 

C. 按列读方式要高一        D. 取决于数组的储方式。OIFans.cn收集

 

 

11 Pascal 语言中表达式 (21 xor 2)         

 

  A. 441        B. 42         C.23        D.24

 

 

12 Pascal 语言中 a 0 b 不等 0 的正的条件表达        

A. not a=0 or not b=0         B. not((a=0)and(b=0)) C. not(a=0 and b=0) D. (a<>0)and (b<>0)

 

 

13某个车呈狭长形度只能容下台车并且有一个出入已知某时该车站状态这一时刻开始的出入记录为“进,出进,进,进出,出,进进,进,出,。假设辆入站的 顺序 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

 

 

14高度 n 的均衡的叉树是指果去掉叶结及相应的树它应该是高 n-1 满二叉树。 在这里,树等于叶结点最大深度,结点的深0,如果某个均衡的二树共2381 个结点, 则该树的树   

 

A. 10         B. 11              C. 12              D. 13

 

 

15. 与十 1770 对应的八进制     

 

A. 3350         B. 3351             C. 3352      D. 3540

 

 

16 5 的序列排不论原先的序如何最少都可以通        次比较完成从小到的排序。

 

A. 6             B. 7              C. 8            D. 9

 

 

 

 

17. A=B=D=trueC=false,以逻辑运算表式值为真的          )。


 

A. (¬ AB)(CD)            B.¬ ((ABD)C)OIFans.cn收集


 

C.   ¬ A(BCD)            D. (ABC) ¬ D

 

 

18.  (2010)16 + (32)8的结果是       

 

A. (8234)10                     B. (202B)16

 

  C. (20056)8                   D. (100000000110)2

 

 

19. 设栈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

 

 

20. 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 1 3 5 4 6            D. 2 3 1 4 6 5

 

 

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

 

 

1(寻找假币 80 枚硬币有一枚是假其重量稍所有真币重量都相同如果使 用不带砝码天平称重少需要称几就可以找出假币?你还指出 1 称重方法写出你的 结果:_________________________________________________

 

 

2(取石子游戏  5 堆石子,数依次 3571950,甲乙两轮流从任一中任取

(每次只能自一堆,不不取, 取最后一颗石子一方获胜。先取,问甲没有获胜策(即无论 乙怎样取,只要不失误都能获胜)如果有,甲一步应该在一堆里取多?请写出你结果:

 

_________________________________________________

 

 

三.阅读程序写结果( 4 题,每 8 分,共 32 分)OIFans.cn收集

 

 

 

1. Program ex301;

 

var

 

u:array[0..3] of integer;

 

i,a,b,x,y:integer;

 

begin

 

   y:=10;

 

for i:=0 to 3 do

 

   read(u[i]);

 

   a:=(u[0]+u[1]+u[2]+u[3]) div 7;

 

b:=u[0] div ((u[1]-u[2]) div u[3]);


 

   x:=(u[0]+a+2)-u[(u[3]+3) mod 4];

 

   if (x>10) then

 

  y:=y+(b*100-u[3]) div (u[u[0] mod 3]*5)

 

   else

 

  y:=y+20+(b*100-u[3]) div (u[u[0] mod 3]*5);

 

   writeln (x,',',y);

 

end. {*:本例中,定的输入数可以避免分 0 或下标界。 }

 

输入:9 3 9 4

 

输出:_______________

 

 

 

2.Program ex302;

 

 const

 

  m:array[0..4] of integer=(2,3,5,7,13);

 

 var

 

  i,j:integer;

 

  t: longint;

 

 begin

 

for i:=0 to 4 do

 

   begin

 

  t:=1;

 

  for j:=1 to m[i]-1 do

 

 t:=t*2;

 

  t:=(t*2-1)*t;

 

  write (t,' ');

 

   end;

 

  writeln;

 

end.

 

输出:____________________

 

 

3.Program ex303; Const

  NN=7; Type

 

  Arr1=array[0..30] of char;OIFans.cn收集

 

var

 

  s:arr1;

 

  k,p:integer;

 

Function fun(s:arr1; a:char;n:integer):integer;

 


 

  var

 

   j:integer;

 

  begin

 

   j:=n;

 

   while (a<s[j])and(j>0) do dec(j);

 

   fun:=j;

 

 end;

 

begin

 

for k:=1 to NN do

 

  s[k]:=chr(ord('A')+2*k+1);

 

  k:=fun(s,'M',NN);

 

  writeln(k);

 

end.

 

输出:_____________

 

 

 

4.program ex304;

 

 var

 

  x,x2:longint;

 

procedure digit(n,m:longint);

 

 var n2:integer;

 

 begin

 

   if(m>0) then

 

  begin

 

   n2:=n mod 10;

 

   write(n2:2);

 

   if(m>1) then  digit(n div 10,m div 10);

 

   n2:=n mod 10;

 

   write(n2:2);

 

  end;

 

 end;

 

begin

 

  writeln('Input a number:');OIFans.cn收集

 

  readln(x);

 

  x2:=1;

 

  while(x2<x) do  x2:=x2*10;

 

  x2:=x2 div 10;

 

  digit(x,x2);

 

  writeln;

 


 

end.

 

输入:9734526

 

输出:______________________________

 

 

四.完善程序 ( 4 空,每 2.5 分, 6 空,每 3 分, 28 )

 

 

1(全排列)下面程序的能是利用递方法生成 1 n(n<10) n 个数的全部可能的排(不一 定按升序输。例如,输 3,则应输出(每行 5 个排列

 

123 132 213     231 321

 

312

 

程序:

Program ex401; Var

 

 i,n,k:integer;

 

a:array[1..10] of integer;

count:longint;  { count 记录不同排的个数,这用于控制换} Procedure    perm(k:integer);

 

 var j,p,t:integer;

 

 begin

 

 if          then

 

   begin

 

  inc(count);

 

  for p:=1 to k do

 

 write(a[p]:1);

 

  write('  ');

 

  if (         ) then writeln;

 

  exit;

 

   end;

 

for j:=k to n do

 

   begin

 

 t:=a[k]; a[k]:=a[j]; a[j]:=t;OIFans.cn收集

 

     ;

 

  t:=a[k];          ;

 

   end

 

 end;

 

begin

 

  writeln('Entry n:');

 

  read(n);

 


 

  count:=0;

 

for i:=1 to n do a[i]:=i;

 

    ;

 

end.

 

 

2由键盘输入一个奇 P (P<100,000,000),其个位数字 5,求一整数 S,使 P×S =

 

1111...1 ( 在给定的件下,解 S 必存在)求在屏幕上次输出以下:

1S 部数字。除后一行外,行输 50 位数字 2 乘积的字位数。 1:输 p=13,由 13*8547=111111,则输出(1854726 2:输 p=147,则出结果应为1755857898715041572184429327286470143613

 

242等式的右 42 1

 

 

程序:

 

 program ex402;

 

var

 

 p,a,b,c,t,n:longint;

 

begin

 

  while (true) do

 

   begin

 

writeln ('Input      p, the last digit is        1 or 3 or 7 or 9:');

 

 readln(p);

 

if (p mod 2<>0)and(p mod 5<>0) then

 

   ; {如果输入的数符要求,结束 }

 

   end;

 

   a:=0; n:=0;

 

   while (a<p) doOIFans.cn收集

 

 begin

 

   a:=a*10+1; inc(n);

 

 end;

 

   t:=0;

 

   repeat

 

   b:=a div p;

 

   write(b:1);

 

   inc(t);

 

   if (      ) then writeln;

 

   c:=       ;  a:=         inc(n);

 

   until c<=0;

 

   dec(n);

 


 

   writeln; writeln('n=',             );

 

end.