加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

第十届绍兴市少儿信息学竞赛

(2015-04-23 13:57:20)
标签:

it

教育

分类: 少儿信息学奥赛初赛

第十届绍兴市少儿信息学竞赛

     

(小学组 PASCAL语言  二小时完成)

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

一、选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题2分,每题只有一个正确答案,多选无分。共20分)

1.某算法的流程图如下所示:

 

依次输入x的值为5、3、0、6后,该算法的输出结果为

A)

6

B)

3

C)

14

D)

8

 

2某用户电子邮箱收件夹中的内容如图所示:

 

从图中可以看出该收件夹内

A)

全部邮件有6封

B)

未读的邮件有4封

C)

带附件的邮件有5封

D)

当天收到的邮件有3封

 

3.笑笑的爷爷最近在学电脑,现在已经会上网了,但总是记不住网址,每次上网时都要问笑笑该输什么网址,后来笑笑略施小“技”,帮爷爷解决了这个难题。之后爷爷再上网时,不仅不用记住网址就能快速地访问自己常去的一些网站,而且每次一启动IE就可以直接打开新华网浏览新闻,笑笑采用的方法是(      )

①将爷爷常用的网址都添加到IE的收藏夹中

②将爷爷常用的网址都添加到IE的临时文件夹中

③将新华网的网址设置为IE的主页

④将爷爷常用的网址都添加到IE的历史记录中

A)

①②

B)

①③

C)

②③

D)

②④

 

4.下列有关信息学名词解释中,错误的是(   

A)

Online Judge:简称OJ,信息学在线评测系统

B)

ExcelMicrosoft公司开发的电子表格处理软件。

C)

FlashMicromedia公司开发的三维动画制作软件。

D)

LOGO语言:内置一套海龟绘图系统,通过向海龟发送命令,用户可以直观地学习程序的运行过程,是适合于儿童学习的入门级语言。

 

5.单字节5-5在计算机内部分别表示为(    

A)

00000101       10000101

B)

00000101       11111010

C)

11111011        11111011

D)

00000101       11111011

 

6 2名驾驶员和6名空中小姐分别上二架不同型号的旅游直升飞机,每机1名驾驶员及3名空中小姐,则上机方法共有多少种?

A)

60

B)

80

C)

40

D)

20

 

7.如图有两个栈s1,s2,有一数字序列2 3 4 1,依次进入其中任意一个栈,任一个数字入栈后也可随时出栈,则不可能的出栈序列是:

 

                 

 

 

 

A)

1 3 2 4

B)

2 1 3 4

C)

4 2 3 1

D)

1 2 3 4

8.寄存器是(   )的重要组成部分。

A)

硬盘

B)

高速缓存

C)

内存

D)

中央处理器(CPU

 

9.在一个果园里,笑笑将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。笑笑决定把所有的果子合成一堆。

每一次合并,笑笑可以把任意两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。笑笑在合并果子时总共消耗的体力等于每次合并所耗体力之和。

假定有5堆果子,每堆果子的数量为124201510,每个果子重量都为2,笑笑想知道最小的体力耗费值是多少。

A)

272

B)

284

C)

164

D)

136

 

10.下面是信息学的相关知识,哪一句是正确的:(   

A)

图灵,美国数学家,1936年设计并成功实现了图灵机,鉴于他巨大的贡献,ACM1966年以他的名字命名设立了图灵奖,图灵在人工智能方面也有重要的研究,被誉为人工智能之父。

B)

DosWin7safariUnixPhotoshop都是操作系统。

C)

信息学奥林匹克竞赛活动有NOIPNOI、冬令营、IOI等,其中NOI是全国青少年信息学奥林匹克竞赛,它最早起源于1984年全国青少年程序设计竞赛。

D)

计算机语言分为机器语言、汇编语言和高级语言,高级语言由解释、编译两种方式翻译执行,第一个计算机高级语言是basic语言。

 

二、根据要求回答问题:(5510分)

1. 中午,笑笑到花鸟市场闲逛,看到有位叔叔在买金鱼,笑笑就蹲在鱼缸边看金鱼吹泡泡,卖金鱼的叔叔看笑笑半天没动弹,还以为笑笑没钱买又很喜欢金鱼,就对笑笑说:“上午我第一次卖出了全部金鱼的一半加2分之一条金鱼;第二次卖出剩余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之三条金鱼;第四次卖出剩余金鱼的八分之一加八分之一条金鱼;最后还剩下13条。问原来有多少条金鱼?如果你答对了,我免费送你两条金鱼。”可怜的笑笑当场就糊涂了,请你帮帮她吧!(每次卖出的都是整数条金鱼)

 

 

问:原来一共有            条金鱼。

 

 

2XXX是一座风景秀丽,气候宜人,历史悠久的的城市,笑笑想到那儿去旅游向往已久。这个暑假,爸爸决定亲自驾车带她到XXX城游玩,这可把笑笑高兴坏了。出发前,爸爸通过网络在XXX城市的中心预订了酒店。XXX城总共有5个景点,爸爸决定每天从酒店出发玩一个景点,晚上回酒店休息,为了节约汽车油费,爸爸事先对酒店及5个景点之间的道路及距离作了了解,如图(单位:公里),也就是如果笑笑他们想到景点B游玩,可以选择酒店->景点B,也可以选择酒店->景点A->景点B,当然还有其它的选择。爸爸想知道5天游完所有景点心爱的汽车最少需要跑多少公里?

 

问:游完所有景点最少需要跑             公里?

 

 

三、阅读程序并写出运行结果(8888+840):

1. program test_2012_1;

var x,a,b,c,d,z:integer;

begin

  readln(x);

  a:=x mod 10;

  b:=(x mod 100) div 10;

  c:=(x mod 1000) div 100;

  d:=x div 1000;

  z:=a*a+b*b+c*c+d*d;

  if trunc((c*d)/(a*b))=(c*d)/(a*b) then inc(z,a*b) else inc(z,c*d);

  writeln(z);

end.

输入:1234

输出:                        

 

2.program test_2012_2;

var m,n,i,j,s:integer;

d:array[0..100] of integer;

begin

  readln(n);

  for m:=10 TO n DO

  begin

    s:=m*m;

    j:=0;

    while  s>0 DO

    begin

      j:=j+1;

      d[j]:=s mod 10;

      s:=s div 10;

    end;

    i:=1;

    while (d[i]=d[j] ) and ( i

    begin

      i:=i+1;

      j:=j-1;

    end;

    IF i>=j then writeln(m);

  end;

end.

输入:30

输出:                  

 

3program test_2012_3;

var  a, b: String;

     i : Integer;

begin

    a:= 'AABBCCDKKRRSSXX';

    readln(b);

    for i := 1 to length(b) Do

        If (b[i] >= '0') AND (b[i] <= '9')

            then write(b[i])

            else

                if (b[i] >= 'A') and (b[i] <= 'Z')

                    then write(a[ord(b[i]) - ord('A') ]);

End.

输入:NOIP-2012

输出:                                    

 

4program test_2012_4;

var x:integer;

procedure add(var z:integer);

begin

writeln(‘z=',z);z:=z+10;writeln('z=',z);

end;

begin

x:=5;writeln(‘x=',x);add(x);writeln(‘x=',x);

end.

输出:                              

 

5program test_2012_5;

var j,k:integer;

function pr(n:integer):boolean;

var i:integer;t:boolean;

begin

t:=true;i:=2;

while t and (i<=sqrt(n)) do

if   n mod i=0  then t:=false

else i:=i+1;

pr:=t;

end;

begin

k:=0;j:=11;

while j<=99 do

begin

if pr(j) and pr(j+2) then

begin writeln(j:4,j+2:4);k:=k+1;end;

j:=j+2;

end;

writeln(‘total:',k);

end.

输出:                           

 

四、完善程序(根据问题要求和已有程序,在程序空格处填入适当的语句或符号,使程序完整。本题共15+15=30

1【成绩处理】(3+3+3+3+3=15分)

笑笑最崇拜她的信息学Mr chen,这不,Mr chen正在教笑笑pascal语言中的记录类型:

有时候我们会遇到这种数据,它由性质各不相同的成分组成,例如:

                      学号  字符串类型          

                      姓名  字符串类型

                      年龄  整型

                      性别  字符型

                      成绩  实型

    如果用5个变量来存储,就失去了一个整体性,Pascal给我们提供了一种叫做记录的结构类型。在一个记录中,可以包含不同类型的并且互相相关的一些数据。

记录的定义:(如上面的数据定义如下)
type  node=record 

            num:string;{学号}
            name:string;{
姓名}
            age:integer;{
年龄}
            sex:string[6];{
性别}
            score:real;{
成绩}
         end;

var student:array[1..100] of node;{定义student数组的每个元素为node这种记录类型,该记录类型包含5个域}
记录的引用:

对记录中每个域的引用,如输入第i个学生的学号,有两种方法:(1)可以写出记录变量名和域名,pascal语言表示为readln(student[i].num);(2)使用开域语句with…dopascal语言表示为  with student[i] do

          Readln(num)

笑笑立马就掌握了这种数据结构,为了在你面前炫耀,她出了一个记录类型的题目考考你,给出n(1<=n<200)个同学m(1<=m<=5)科的考试成绩,按总分找出前十名是哪些同学。规定:总分相同名次相同,且占用后面的名次,例如:第2名有两个同学,那么将没有第3名,后面的同学将从第4名算起。

Input

第一行为nm,下面n行为每个同学的成绩描述: 每行有m+1个数,其中第一个数为学号(小于等于200),后面为各科成绩,成绩为0~100之间的实数,中间用一个空格隔开。

Output

一行,成绩名次在前10的同学学号,不足10名全部输出。当第10名有多个同学时,输出有可能超过10名同学的学号。同名次按学号由小到大输出。输出的各个学号之间用一个空格隔开。

Sample Input

17 2

1 7 13

2 18 54

3 47 91

4 65 86

5 44 48

6 92 88

7 80 36

8 76 68

9 54 21

10 65 11

11 61 69

12 78 32

13 0 81

24 93 32

15 42 97

16 28 9

17 65 55

Sample Output

6 4 8 15 3 11 24 17 7 12

program test_2012_6;

type cj=array[1..5] of real;

     rec=record

          num:integer;  //学号

          s:cj;         //考试科目成绩

          m1:integer;   //名次

          sum:real;     //总分

       end;

var a:array[1..200] of rec; i,j,n,m,k:integer;t:rec;

begin

   readln(n,m);

   for i:=1 to n do

     with a[i] do

     begin

                     sum:=0;

       for j:=1 to m do begin read(s[j]);sum:=               end;

       m1:=0;

       readln;

     end;

   for i:=1 to n-1 do

     for j:=1 to n-i do  

 if   (a[j].sum

(                )and(a[j].num>a[j+1].num)

then begin t:=a[j];           a[j+1]:=t; end;

   a[1].m1:=1;k:=1;

   for i:=2 to n do

     if a[i].sum=a[i-1].sum then a[i].m1:=k

                    else begin inc(k);a[i].m1:=k; end;

   for i:=1 to n do

     if i<=10 then write(a[i].num,' ')

       else if a[i].sum=a[i-1].sum then  write(         ,' ')

                                else break;

end.

 

2【布置新房】(3+3+3+3+3=15分)

笑笑今天很开心,家里购置的新房领到钥匙了,新房里有一间笑笑自己专用的很宽敞的房间。更让她高兴的是,妈妈昨天对她说:你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过m元钱就行。笑笑怀里揣着mRMB到了商场,商场里的物品真多啊,让人眼花缭乱。笑笑想买的东西很多,于是,她把想买的每件物品规定了一个重要度,用整数表示,数值越大越重要,当然每件物品都有价格,笑笑经过仔细观察,发现这个商场很奇特,所有物品的价格都是整数。笑笑希望在不超过m元(可以等于m元)的前提下,买回去布置新房的物品的重要度之和最大。

比如想买有4件物品,价格分别为3,4,5,8,对应的重要度分别为4,5,7,10,笑笑总共有12元钱,则取编号为1,2,3的物品,得到最大的重要度之和为16

Input

第一行为mn,中间用空格隔开,表示mRMB和商场中有n件物品。

下面n行依次为每件物品的价格和重要度,中间用一个空格隔开。

Output

一行,表示在不超过m元的前提下笑笑购买物品的最大重要度之和。

Sample Input

12 4

3 4

4 5

5 7

8 10

Sample Output

16

算法思路:

穷举。用一个b数组来存放物品选取的情况,当b[i]=0时表示第i件物品不取,当b[i]=1时表示第i件物品已取,初始化全部取0,可以从后面的物品开始取起,通过b数组的取值把15种取法全部穷举出来,重要度之和max初始化为0

b[0] b[1] b[2] b[3] b[4]

 0   0   0   0   0 {初始化}

0   0   0   0   1 {取第4件物品,价格为8,不超,重要度为10,max替换为10}

 0   0   0   1   0 {取物品3,价格为5,不超,重要度为7,小于max,不换}

 0   0   0   1   1 {取物品3,4,价格为13,}

 0   0   1   0   0 {取物品2,价格为4,不超,重要度为5,不换}

 0   0   1   0   1

 0   0   1   1   0

 0   0   1   1   1

    

 0   1   1   1   0{取物品1,2,3,价格为12,重要度为16,max替换为16}

 0   1   1   1   1

 1   0   0   0   0{b[0]=1时停止,b[0]称为哨兵}

program test_2012_7;

var v,p:array[1..100]of integer; //物品的价格和重要度

    b:array[0..100]  of 0..1;   //表示物品的选取情况

i,j,m,n,max,vsum,psum:integer;

begin

readln(m,n);

 for i:=1 to n do

                

fillchar(b,sizeof(b),0);

 max:=0;

 while b[0]=0 do

  begin

   j:=n;

   while b[j]=1 do dec(j);

   b[j]:=1;

   for i:=j+1 to n do         

    vsum:=0;psum:=0;

    for j:=1 to n do

       if b[j]=1 then begin              ;psum:=psum+p[j]; end;

    if vsum<=m then if max             ;

 end;

  writeln(          );

end.

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有