长沙市小学生计算机奥林匹克竞赛决赛题答案.docx

上传人:b****3 文档编号:3507100 上传时间:2022-11-23 格式:DOCX 页数:22 大小:42.42KB
下载 相关 举报
长沙市小学生计算机奥林匹克竞赛决赛题答案.docx_第1页
第1页 / 共22页
长沙市小学生计算机奥林匹克竞赛决赛题答案.docx_第2页
第2页 / 共22页
长沙市小学生计算机奥林匹克竞赛决赛题答案.docx_第3页
第3页 / 共22页
长沙市小学生计算机奥林匹克竞赛决赛题答案.docx_第4页
第4页 / 共22页
长沙市小学生计算机奥林匹克竞赛决赛题答案.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

长沙市小学生计算机奥林匹克竞赛决赛题答案.docx

《长沙市小学生计算机奥林匹克竞赛决赛题答案.docx》由会员分享,可在线阅读,更多相关《长沙市小学生计算机奥林匹克竞赛决赛题答案.docx(22页珍藏版)》请在冰豆网上搜索。

长沙市小学生计算机奥林匹克竞赛决赛题答案.docx

长沙市小学生计算机奥林匹克竞赛决赛题答案

2001年长沙市计算机奥林匹克竞赛决赛试题

(时间:

120分钟)

一、(40分)键入一个字符串(串长不超过20),输出相应字符组成的等边三角形。

如:

输入:

“CHINA”

输出:

程序:

programCS200101;

var

s:

string;

n,i,j:

integer;

begin

write('Inputastring:

');

readln(s);

n:

=length(s);

fori:

=1tondobegin

write('':

40-i);

forj:

=1toidowrite(s[j],'');

writeln

end;

readln

end.

二、(50分)一光滑墙壁高X尺,有一个小虫从墙底部向上爬,每分钟爬Y尺。

但每爬一分钟后都要休息一分钟,在休息期间又下滑一尺。

编程:

输入X和Y,计算该小虫最少几分钟可爬到顶端。

如:

输入:

X,Y=4,2

输出:

5

程序:

programCS200102;

varx,y,s,n:

integer;

begin

write('X,Y=');

readln(x,y);

ify>1thenbegin

s:

=0;n:

=0;

repeat

s:

=s+y;n:

=n+1;

ifs<>xthenbegin

s:

=s-1;n:

=n+1;

end;

untils>=x;

writeln(n);

endelsewriteln('Never');

readln

end.

三、(50分)科学家在热带森林中发现了一种特殊的小动物,取名为“吱吱”。

“吱吱”的生长繁殖过程很有规律,每对小“吱吱”经过X个月就长成一对大“吱吱”,每对大“吱吱”每个月都产下Y对小“吱吱”。

假设开始时有一对小“吱吱”,并且每对“吱吱”都不死,问:

过Z个月后,共有多少对“吱吱”?

(X≥1,Y≥1,1≤Z≤24)

(注:

若当前是1月,则“过”2个月,是表示到3月的时候)

输入:

X,Y,Z的值输出:

“吱吱”的总对数

如:

输入:

X,Y,Z=2,2,4

  输出:

11

程序:

programCS200103;

var

x,y,z,s,s1,n:

longint;{s1为大“吱吱”的个数}

s2:

array[1..24]oflongint;{s2为小“吱吱”的个数,s2[1]代表第一天小“吱吱”的个数,依次类推}

begin

s:

=0;s1:

=0;s2[1]:

=1;

write('X,Y,Z=');

readln(x,y,z);

forn:

=xtoz+1dobegin

s2[n]:

=s1*y;{计算当天出生的小“吱吱”}

s1:

=s1+s2[n-x+1];s2[n-x+1]:

=0;{计算当天长大的“吱吱”,s2[n-x+1]为X个月前出生的小“吱吱”个数}

end;

s:

=s+s1;{将大“吱吱”数计入总数}

forn:

=1toz+1dos:

=s+s2[n];{将小“吱吱”数计入总数}

writeln(s);

readln

end.

四、(60分)如下图所示,键入A,B,C,D,E的值,然后从A出发,顺次经过每个数字分岔路口,选择+、-、*、/ 四种运算符之一进行运算,达到目的地E时,运算结果恰好等于E,请你将所有符合上述条件的道路全部找出来。

输入:

A、B、C、D和E的值(其中A、B、C、D都是1~9的数字,E是正整数)

输出:

从A能到达E的所有道路代表的运算式(注意:

前两步运算要加括号)

   最后打印出道路的总数。

   如:

输入:

A,B,C,D,E=1,2,3,4,10

     输出:

((1+2)+3)+4=10

((1*2)*3)+4=10

TOTAL=2

程序:

programCS200104;

varA,B,C,D,E,sum,f1,f2,f3,total:

integer;

functions(n1,n2,f:

integer):

integer;

begin

casefof

1:

s:

=n1+n2;

2:

s:

=n1-n2;

3:

s:

=n1*n2;

4:

if(n2<>0)and(trunc(n1/n2)=n1divn2)thens:

=n1divn2elses:

=-1000;

end;

end;

procedurewf(x:

integer);

begin

casexof

1:

write('+');

2:

write('-');

3:

write('*');

4:

write('/');

end;

end;

begin

total:

=0;

write('A,B,C,D,E=');

readln(a,b,c,d,e);

forf1:

=1to4do

forf2:

=1to4do

forf3:

=1to4do

ife=s(s(s(a,b,f1),c,f2),d,f3)thenbegin

total:

=total+1;

write('(','(',a);wf(f1);

write(b,')');wf(f2);

write(c,')');wf(f3);

writeln(d,'=',e)

end;

writeln('TOTAL=',total);

readln;

end.

2002年长沙市计算机奥林匹克竞赛决赛试题

(时间:

120分钟)

一、填信息(20分)

小明对信息学很感兴趣,他报名参加今年的小学生电脑奥赛,报名时老师要求他填写自己的相关信息。

现在,请你将自己的相关信息打印出来。

显示格式要求如下:

说明:

X1为你的决赛证编号

 X2为你的姓名(用拼音)

   X3为你的性别(男生用boy,女生用girl)

   X4为你所在的学校名称(用拼音)

MynumberisX1

MynameisX2

MysexisX3

MyschoolisX4

程序:

programCS200201;

begin

writeln('Mynumberis200201');

writeln('MynameisXiaoMing');

writeln('Mysexisboy');

writeln('MyschoolisTongPuJie');

end.

二、找字符(60分)

有一天,小明编了一个程序,能很快找出一个字符串中出现次数最多的字符,你能做到吗?

输入:

一个字符串(长度不超过50)

输出:

按字符在字符串中出现的先后顺序,显示出现次数最多的字符

样例

  输入:

ACABBCCDDB

  输出:

CB

程序:

programCS200202;

var

a,b:

string;

c:

char;

d:

array[1..50]ofinteger;{记录每一字符出现的次数,同时数组的序号也就代表了字符出现的先后次序}

i,j,max:

integer;

begin

readln(a);

b:

=a;{将字符串a赋值给b,起到保护输入的字符串a的作用。

这一操作不是必须的,也可以直接对字符串a进行操作。

但因后面的程序会造成对所操作的字符串内容的破坏,养成对输入内容进行保护的习惯有益的。

}

fori:

=1tolength(a)dobegin

c:

=b[i];

d[i]:

=0;

ifc<>'.'Then

forj:

=itolength(a)dobegin

ifc=b[j]thenbegin

d[i]:

=d[i]+1;b[j]:

='.';{每找到一个相同的字符就把此字符赋值为’.’,这样就不会重复寻找相同的字符,在d数组中每个字符出现次数的记录将是唯一的。

}

end;

end;

end;

max:

=d[1];

fori:

=2tolength(a)doifd[i]>maxthenmax:

=d[i];{寻找字符出现的最大次数}

fori:

=1tolength(a)doifd[i]=maxthenwrite(a[i]);{按次序输出出现资料最多的字符}

writeln;

readln;

end.

三、拼三角(60分)

有一次,老师给小明N根小木棒,要他从中选出K根,使这K根当中的任意三根都能拼成一个三角形。

老师告诉他,构成一个三角形的条件是:

任意两边之和大于第三边,任意两边之差小于第三边。

小明思考后,发现将这些小木棒按长短顺序排列后,很容易解决问题。

请你用表达式RANDOM(900)随机产生N个正整数(表示小木棒的长度),帮小明求出K的最大值。

输入:

N(3≤N≤500)

输出:

K的最大值

样例

  输入:

6

 排序后的6个随机数为:

19,26,161,220,348,529

  输出:

3

程序:

programCS200203;{基本思路:

如果三角形中二条较小边的和大于最大边,则此三条边可以构成三角形。

对于有序排列的数,只要确定了能构成三角形的最小数和最大数,中间的每一个数都符合条件}

var

n,k,i,j,t,l:

integer;

a,b:

array[1..500]ofinteger;

ok:

boolean;

begin

readln(n);

fori:

=1tondobegin

a[i]:

=random(900)+1;

end;{生成随机数并赋值给数组a}

fori:

=1tondowrite(a[i]:

5);writeln;{显示生成的随机数,调试用}

fori:

=1ton-1do

forj:

=i+1tondo

ifa[i]>a[j]thenbegin

t:

=a[i];a[i]:

=a[j];a[j]:

=t;

end;{对生成的随机数从小到大进行排序}

fori:

=1tondowrite(a[i]:

5);writeln;{显示排序结果,调试用}

fori:

=1ton-2dobegin

ok:

=false;

l:

=n;

repeat

ifa[i]+a[i+1]>a[l]thenok:

=trueelsel:

=l-1;

untilokor(l=i+1);{对于每根小棒寻找能够构成三角形的最长小棒在数组a中的位置l}

ifokthenb[i]:

=l-i+1;{得到能与当前小棒组成三角形的小棒数量}

end;

fori:

=1tondowrite(b[i]:

5);writeln;

k:

=b[1];

forj:

=2tondo

ifb[j]>kthenk:

=b[j];

writeln('K=',k);

readln;

end.

四、数的统计(60分)

一个数“含有0”是指这个数至少有某一位数字为0。

小明对那些“含有0”的自然数很感兴趣,想挑出来进行研究。

那么,1~N当中“含有0”的自然数有多少个?

小明想在1秒钟内得到答案,你能帮他做到吗?

输入:

N(1≤N≤100000000)

样例

  输入:

105

  输出:

15

程序:

programCS200204;

varn,i,l:

longint;

s:

string;

begin

l:

=0;readln(n);

fori:

=1tondobegin

str(i,s);

ifpos('0',s)<>0thenl:

=l+1;

end;

writeln(l);

end.

2004年长沙市计算机奥林匹克竞赛决赛试题

(时间:

120分钟)

一、求和(30分)

由键盘输入正整数N(N≤100),求1到N之间所有的5的倍数之和S。

例:

输入:

N=10

  输出:

S=15 (因为1~10之间只有5和10是5的倍数)

程序:

programCS200204;

varn,i,l:

longint;

s:

string;

begin

l:

=0;

readln(n);

fori:

=1tondobegin

str(i,s);

ifpos('0',s)<>0thenl:

=l+1;

end;

writeln(l);

end.

二、文本图形(50)

由键盘输入正整数N(N≤21)和一个字符串A(A由N个任意的大写字母组成),要求输出一个左右对称的N行的文本图形。

例:

输入:

N=4

     A=ABCD

  输出:

      

程序:

programCS200402;

var

n,i,j,k:

integer;

a:

string;

begin

write('N=');readln(n);

write('A=');readln(a);

fori:

=1tondobegin

write('':

41-i);

forj:

=1toidowrite(a[j]);

fork:

=i-1downto1dowrite(a[k]);

writeln;

end;readln;

end.

三、找数(60分)

由键盘输入正整数N(N≤500)和K(K≤9),请找一个正整数M,使N×M的值仅由0~K组成,而且0~K的每个数字至少出现一次。

编程序在1~30000范围内找出符合条件的最小的M值,如果找不到,则输出“Nofind!

”。

例:

①输入:

N,K=65,3

   输出:

M=48      (因为65×48=3120)

  ②输入:

N,K=125,8

   输出:

No find!

程序:

programCS200403;

varn,k,m,i,j,s:

longint;

t:

boolean;

a,b:

string;

label1;

begin

write('N,K=');readln(n,k);

form:

=1to30000dobegin

s:

=n*m;

t:

=true;

str(s,a);{将s转换为字符串a}

fori:

=0tokdobegin

str(i,b);

ifpos(b,a)=0thent:

=false;

end;{如果0~k之间有一个数不包含在a当中,则令逻辑指针为假}

forj:

=k+1to9dobegin

str(j,b);

ifpos(b,a)<>0thent:

=false;

end;{如果k~9之间有一个数包含在a当中,则令逻辑指针为假}

ift=truethengoto1;{找到符合条件的m值,跳转输出部分}

end;

1:

ift=truethenwriteln('M=',m)elsewriteln('Nofind!

');

readln;

end.

四、求倍数及“0”的个数(60分)

由键盘输入正整数N(N≤50),已知数列A1,A2,A3,……,An分别为2004,20042004,200420042004,……,20042004……2004。

问:

A1+A2+A3+……+An的精确值S有多少位数?

S当中有多少个“0”?

(设:

S的位数为K,S中“0”的个数为Z)

例:

输入:

N=2

  输出:

K=8  Z=4  (因为S=20044008)

 

程序:

programCS200404;

vara,s:

array[1..200]ofinteger;

n,k,z,i,j,m,l:

integer;

begin

write('N=');readln(n);

k:

=n*4;{得到S的位数。

}

fori:

=1tondobegin

forj:

=1to4*idobegin

l:

=jmod4;

caselof

0:

a[j]:

=2;

1:

a[j]:

=4;

2,3:

a[j]:

=0;

end;{生成An。

为方便运算,生成的An为4002……40024002的形式,第一位为个数}

end;

form:

=1tokdobegin

s[m]:

=s[m]+a[m];

ifs[m]>=10thenbegin

s[m]:

=s[m]mod10;a[m+1]:

=a[m+1]+1;

end;{逢10进1}

end;{将An累加进s}

end;

z:

=0;

fori:

=1to4*ndoifs[i]=0thenz:

=z+1;{统计0的个数}

writeln('K=',k,'Z=':

5,z);

readln;

end.

2005年长沙市计算机奥林匹克竞赛决赛试题

(时间:

120分钟)

一、拆分整数:

(100分)

输入一个正整数N,如果N是偶数,则拆分N的各个数字相加求和;如果N是奇数,则拆分N的各个数字相乘求积。

输入输出样例:

  输入:

N=126 输出:

H=9

  输入:

N=123 输出:

J=6

程序:

programCS200501;

var

n,h,j,l,i,t:

integer;

a:

array[1..10]ofinteger;

s:

string;

begin

write('N=');readln(n);

t:

=n;i:

=1;

ift>10then

repeat

a[i]:

=tmod10;

t:

=tdiv10;

i:

=i+1;

untilt<10;

a[i]:

=t;{拆分N的各个数字,存放在数组a中}

str(n,s);{将数n转换为字符串s}

l:

=length(s);{取s长度,即得到数n的位数}

h:

=0;j:

=1;

ifnmod2=0thenbegin

fori:

=1toldoh:

=h+a[i];

writeln('H=',h);

endelsebegin

fori:

=1toldoj:

=j*a[i];

writeln('J=',j);

end;{根据N的奇偶求和或求积}

readln;

end.

二、排最大数:

(100分)

输入N个正整数,请你将它们连接在一起,排成一个最大的数。

例如:

N=4时,如果四个正整数是7、13、18、246,则连接成的最大数为72461813。

输入:

N(1≤N≤10)     输出:

连接成的最大数

   N个正整数(以空格相隔)

输入输出样例:

  输入:

N=4         输出:

72461813

     7 13 18 246

程序:

programCS200502;

var

s:

array[1..10]ofstring;

a:

array[1..10]ofinteger;

n,i,j:

integer;

t:

string;

begin

write('N=');readln(n);

fori:

=1tondobegin

read(a[i]);

str(a[i],s[i]);

end;{输入数据并转换为字符串}

readln;

fori:

=1ton-1do

forj:

=itondo

ifs[i]

t:

=s[i];s[i]:

=s[j];s[j]:

=t;

end;{对字符串进行排序}

fori:

=1tondowrite(s[i]);{输出结果}

readln;

end.

三、扫雷游戏:

(100分)

有一种简单的扫雷游戏:

在N行2列的方格棋盘上,左列某些方格内埋有地雷,而右列每个方格中都有一个数字(0~3),第I格的数字表示:

左列第I-1、I、I+1格(即:

上、中、下三格)中埋雷的总数。

如下所示:

左图是初始状态,右图是扫雷完成状态(插小旗的方格内有雷)。

你的任务是:

根据右列的数字分析出左列格子中的地雷(0表示无雷,1表示有雷),并且统计出左列格子中地雷的总数。

输入:

N(2≤N≤40)

   N个数字(以空格相隔),表示右列格子中的数字。

输出:

N个0、1数字(占一行),表示左列每格中有无地雷。

   地雷总数(另起一行)

输入输出样例(如上图示):

  输入:

N=7          输出:

0111011

     1232222         L=5

程序:

programCS200503;

varn,l,i:

integer;

a,b:

array[1..40]ofinteger;

label1,2;

begin

write('N=');readln(n);

fori:

=1tondoread(b[i]);

readln;

ifn>2thenbegin

a[3]:

=b[2]-b[1];

a[1]:

=0;a[2]:

=b[1]-a[1];

fori:

=3tondobegin

a[i]:

=b[i-1]-a[i-1]-a[i-2];

if(a[i]<>0)and(a[i]<>1)thengoto1;

end;

ifa[n]<>b[n]-a[n-1]thengoto1;

goto2;

1:

a[1]:

=1;a[2]:

=b[1]-a[1];

fori:

=3tondobegin

a[i]:

=b[i-1]-a[i-1]-a[i-2];

end;

2:

l:

=0;

fori:

=1tondobegin

write(a[i]);

ifa[i]=1thenl:

=l+1;

end;

writeln;

writeln('L=',l);

end;

ifn=2then

caseb[1]of

0:

begin

writeln(0,0);writeln('L=',0);

end;

1:

begin

writeln(0,1);writeln(1,0);writeln('L=',1);

end;

2:

begin

writeln(1,1);writeln('L=',2);

end;

end;

readln;

end.

2006年长沙市计算机奥林匹克竞赛决赛试题

(时间:

120分钟)

一、评选(100分)

某班根据语文、数学、英语和计算机这四科成绩,评选学习积极分子。

评选规则如下:

(设:

Y、S、E、J分别代表语文、数学、英语、计算机)

1、四科平均成绩高于90分,可评为A类学习积极分子。

2、Y、S、E三科平均成绩高于80分,而且J不低于90分,可评为B类学习积极分子。

3、四科中最高分为100分,最低分不低于60分,可评为C类学习积极分子。

4、一个学生只能被评为符合条件的最高一类学习积极分子(A类最高、C类最低)。

现在输入某个学生的四科成绩,请判断该学生能被评为哪一类学习积极分子。

输入:

四个整数Y S E J

输出:

#A或#B或#C(分别表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1