小学生信息学奥赛决赛题006年决赛题答案.docx

上传人:scccc 文档编号:13956357 上传时间:2022-01-28 格式:DOCX 页数:17 大小:47.55KB
返回 下载 相关 举报
小学生信息学奥赛决赛题006年决赛题答案.docx_第1页
第1页 / 共17页
小学生信息学奥赛决赛题006年决赛题答案.docx_第2页
第2页 / 共17页
小学生信息学奥赛决赛题006年决赛题答案.docx_第3页
第3页 / 共17页
小学生信息学奥赛决赛题006年决赛题答案.docx_第4页
第4页 / 共17页
小学生信息学奥赛决赛题006年决赛题答案.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《小学生信息学奥赛决赛题006年决赛题答案.docx》由会员分享,可在线阅读,更多相关《小学生信息学奥赛决赛题006年决赛题答案.docx(17页珍藏版)》请在三一文库上搜索。

1、2001年长沙市计算机奥林匹克竞赛决赛试题(时间:120分钟)一、(40分)键入一个字符串(串长不超过20),输出相应字符组成的等边三角形。如:输入:“CHINA输出:C C H C H I C H 1 H CHIBA程序:program CS200101; vars:string;n,i,j:integer;beginwrite(Input a string:);readln(s);n:=length(s);for i:=1 to n do beginwrite(:40-i);for j:=1 to i do write(sj,); writelnend; readln end.二、(50分

2、)一光滑墙壁高 X尺,有一个小虫从墙底部向上爬,每分钟爬Y尺。但每爬一分钟后都要休息一分钟,在休息期间又下滑一尺。编程:输入 X和Y,计算该小虫最少几分钟 可爬到顶端。如:输入:X, Y= 4,2 输出:5 程序:program CS200102; var x,y,s,n:integer; beginwrite(X,Y=);readln(x,y);if y1 then begin s:=0;n:=0;repeats:=s+y;n:=n+1;if sx then begin s:=s-1;n:=n+1;end;until s=x; writeln(n);end else writeln(Neve

3、r); readlnend.三、(50分)科学家在热带森林中发现了一种特殊的小动物,取名为“吱吱”。“吱吱”的生长繁殖过程很有规律,每对小“吱吱”经过 X个月就长成一对大“吱吱”,每对大“吱吱” 每个月都产下 Y对小“吱吱”。假设开始时有一对小“吱吱”,并且每对“吱吱”都不死,问:过Z个月后,共有多少对“吱吱”(X1, Y 1,1 WZW24)(注:若当前是1月,则“过” 2个月,是表示到 3月的时候)输入:X, Y, Z的值输出:“吱吱”的总对数如:输入:X, Y, Z= 2, 2, 4 输出:11程序:program CS200103; varx,y,z,s,s1,n:longint;s1

4、 为大“吱吱的个数s2:array1.24 of longint;s2为小“吱吱”的个数,s21代表第一天小“吱吱”的个数,依 次类推begins:=0;s1:=0;s21:=1;write(X,Y,Z=);readln(x,y,z);for n:=x to z+1 do begins2n:=s1*y;计算当天出生的小“吱吱” s1:=s1+s2n-x+1;s2n-x+1:=0;计算当天长大的吱吱,s2n-x+1为X个月前出生的小 “吱吱”个数end;s:=s+s1;将大“吱吱”数计入总数for n:=1 to z+1 do s:=s+s2n;将小吱吱”数计入总数writeln(s);read

5、ln end.四、(60分)如下图所示,键入 A, B, C, D, E的值,然后从 A出发,顺次经过每个数字 分岔路口,选择+、*、/四种运算符之一进行运算,达到目的地 E时,运算结果恰好等于E,请你将所有符合上述条件的道路全部找出来。输入:A、B、C D和E的值(其中A、BC、D都是19的数字,E是正整数)输出:从A能到达E的所有道路代表的运算式(注意:前两步运算要加括号)最后打印出道路的总数。如:输入:A, B, C, D, E= 1,2,3,4,10输出:(1 + 2) + 3) + 4=10(1*2) * 3) +4 = 10TOTA2程序:program CS200104;var

6、A,B,C,D,E,sum,f1,f2,f3,total:integer;function s(n1,n2,f:integer):integer;begincase f of1:s:=n1+n2;2:s:=n1-n2;3:s:=n1*n2;4:if (n20) and (trunc(n1 /n2)=n1 div n2) then s:=n1 div n2 else s:=-1000;end;end;procedure wf(x:integer);begincase x of1:write(+);2:write(-);3:write(*);4:write(/);end;end;begintota

7、l:=0;write(A,B,C,D,E=);readln(a,b,c,d,e);for f1:=1 to 4 dofor f2:=1 to 4 dofor f3:=1 to 4 doif e=s(s(s(a,b,f1),c,f2),d,f3) then begintotal:=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分)小明对信息学很

8、感兴趣,他报名参加今年的小学生电脑奥赛,报名时老师要求他填写自己的相关信息。现在,请你将自己的相关信息打印出来。显示格式要求如下:说明:X1为你的决赛证编号X2为你的姓名(用拼音)X3为你的性别(男生用 boy,女生用girl)X4为你所在的学校名称(用拼音)My number is X1My name is X2My sex is X3My school is X4程序:program CS200201; beginwriteln(My number is 200201);writeln(My name is XiaoMing);writeln(My sex is boy);writeln(

9、My school is TongPuJie);end.二、找字符(60分)有一天,小明编了一个程序,能很快找出一个字符串中出现次数最多的字符,你能做到吗输入:一个字符串(长度不超过50)输出:按字符在字符串中出现的先后顺序,显示出现次数最多的字符样例输入:ACABBCCDDB输出:CB程序:program CS200202;vara,b:string;c:char;d:array1.50 of integer;记录每一字符出现的次数,同时数组的序号也就代表了字符出现 的先后次序i,j,max:integer;beginreadln(a);b:=a;将字符串a赋值给b,起到保护输入的字符串a的

10、作用。这一操作不是必须的,也可以直接对字符串a进行操作。但因后面的程序会造成对所操作的字符串内容的破坏,养成对输入内容进行保护的习惯有益的。for i:=1 to length(a) do beginc:=bi;di:=0;if c. Thenfor j:=i to length(a) do beginif c=bj then begindi:=di+1;bj:=.;每找到一个相同的字符就把此字符赋值为 相同的字符,在d数组中每个字符出现次数的记录将是唯一的。end;end;end;max:=d1;for i:=2 to length(a) do if dimax then max:=di;

11、寻找字符出现的最大次数 for i:=1 to length(a) do if di=max then write(ai); 按次序输出出现资料最多的字符writeln;readln; end.三、拼三角(60分)有一次,老师给小明N根小木棒,要他从中选出K根,使这K根当中的任意三根都能拼成一个三角形。老师告诉他,构成一个三角形的条件是:任意两边之和大于第三边, 任意两边之差小于第三边。小明思考后,发现将这些小木棒按长短顺序排列后,很容易解决问题。请你用表达式 RANDOM (900)随机产生N个正整数(表示小木棒的长度),帮小明求出 K 的最大值。输入:N (3WNW 500)输出:K的最大

12、值样例输入:6排序后的6个随机数为:19,26,161,220,348,529 输出:3程序:program CS200203磔本思路:如果三角形中二条较小边的和大于最大边,则此三条边可以 构成三角形。对于有序排列的数,只要确定了能构成三角形的最小数和最大数,中间的每一个数都符合条件varn,k,i,j,t,l:integer;a,b:array1.500 of integer;ok:boolean;beginreadln(n);for i:=1 to n do beginai:=random(900)+1;end;生成随机数并赋值给数组afor i:=1 to n do write(ai:5

13、);writeln;显示生成的随机数,调试用 for i:=1 to n-1 dofor j:=i+1 to n doif aiaj then begint:=ai;ai:=aj;aj:=t;end;对生成的随机数从小到大进行排序for i:=1 to n do write(ai:5);writeln;显示排序结果,调试用 for i:=1 to n-2 do beginok:=false;l:=n;repeatif ai+ai+1al then ok:=true else l:=l-1;until ok or (l=i+1); 对于每根小棒寻找能够构成三角形的最长小棒在数组a中的位置lif

14、ok then bi:=l-i+1; 得到能与当前小棒组成三角形的小棒数量end;for i:=1 to n do write(bi:5);writeln;k:=b1;for j:=2 to n doif bjk then k:=bj;writeln(K=,k);readln;end.四、数的统计(60分)一个数“含有0”是指这个数至少有某一位数字为0。小明对那些“含有 0”的自然数很感兴趣,想挑出来进行研究。那么, 1N当中“含有0”的自然数有多少个小明想在1秒钟内得到答案,你能帮他做到吗输入:N (1W NW 0)样例输入:105输出:15程序:program CS200204;var n

15、,i,l:longint;s:string;beginl:=0; readln(n);for i:=1 to n do begin str(i,s);if pos(0,s)0 then l:=l+1;end;writeln(l);end.2004年长沙市计算机奥林匹克竞赛决赛试题(时间:120分钟)一、求和(30分)由键盘输入正整数 N (NW100),求1到N之间所有的5的倍数之和S。例:输入:N= 10输出:S= 15(因为110之间只有5和10是5的倍数)程序:program CS200204;var n,i,l:longint;s:string;beginl:=0;readln(n);

16、for i:=1 to n do beginstr(i,s);if pos(0,s)0 then l:=l+1;end;writeln(l);end.二、文本图形(50)由键盘输入正整数 N (NW21)和一个字符串 A (A由N个任意的大写字母组成),要求 输出一个左右对称的N行的文本图形。例:输入:N = 4A= ABCD输出:AAEAABCBAABCDCRA程序:program CS200402; varn,i,j,k:integer;a:string;beginwrite(N=);readln(n);write(A=);readln(a);for i:=1 to n do beginw

17、rite(:41-i);for j:=1 to i do write(aj);for k:=i-1 downto 1 do write(ak);writeln;end; readln;end.三、找数(60分)由键盘输入正整数N (NW500)和K (KW 9),请找一个正整数M,使NXM的值仅由0K组成,而且0K的每个数字至少出现一次。编程序在130000范围内找出符合条件的最小的M值,如果找不到,则输出“ No find!”。例:输入:N, K=65,3输出:M=48(因为 65X48=3120)输入:N, K= 125,8输出:No find!程序:program CS200403; v

18、ar n,k,m,i,j,s:longint;t:boolean;a,b:string;label 1;beginwrite(N,K=);readln(n,k);for m:=1 to 30000 do begins:=n*m;t:=true;str(s,a);将s转换为字符串afor i:=0 to k do begin str(i,b);if pos(b,a)=0 then t:=false;end;如果0k之间有一个数不包含在a当中,则令逻辑指针为假 for j:=k+1 to 9 do begin str(j,b);if pos(b,a)0 then t:=false;end;如果k9

19、之间有一个数包含在 a当中,则令逻辑指针为假 if t=true then goto 1;找到符合条件的 m值,跳转隼出部分 end;1:if t=true then writeln(M=,m) else writeln(No find!);readln;end.四、求倍数及“ 0”的个数(60分)由键盘输入正整数 N ( N w 50 ),已知数列 A1 , A2 , A3 , ,An分别为 2004,2004,2004。问:A1 + A2+A3+ An的精确值 S有多少位数 S当中 有多少个“ 0”(设:S的位数为K, S中“0”的个数为Z)例:输入:N=2输出:K= 8Z= 4 (因为S

20、=)程序:program CS200404;var a,s:array1.200 of integer;n,k,z,i,j,m,l:integer;beginwrite(N=);readln(n);k:=n*4;得到S的位数。for i:=1 to n do beginfor j:=1 to 4*i do beginl:=j mod 4;case l of0:aj:=2;1:aj:=4;2,3:aj:=0;end;生成An。为方便运算,生成的 An为4002的形式,第一位为个数end;for m:=1 to k do beginsm:=sm+am;if sm=10 then beginsm:=

21、sm mod 10;am+1:=am+1+1;end;逢 10 进 1end;将An累加进send;z:=0;for i:=1 to 4*n do if si=0 then z:=z+1;统计 0 的个数writeln(K=,k,Z=:5,z);readln;end.2 0 0 5年长沙市计算机奥林匹克竞赛决赛试题(时间:120分钟)一、拆分整数:(1 0 0分)输入一个正整数 N,如果N是偶数,则拆分 N的各个数字相加求和;如果N是奇数,则拆分N的各个数字相乘求积。输入输出样例:输入:N= 1 2 6 输出:H= 9输入:N= 1 2 3 输出:J= 6程序:program CS200501

22、;varn,h,j,l,i,t:integer;a:array1.10 of integer;s:string;beginwrite(N=);readln(n);t:=n;i:=1;if t10 thenrepeatai:=t mod 10;t:=t div 10;i:=i+1;until t10;ai:=t;拆分N的各个数字,存放在数组a中str(n,s);将数n转换为字符串sl:=length(s);取s长度,即得到数 n的位数h:=0;j:=1;if n mod 2=0 then beginfor i:=1 to l do h:=h+ai;writeln(H=,h);end else b

23、eginfor i:=1 to l do j:=j*ai;writeln(J=,j);end;根据N的奇偶求和或求积readln;end.二、排最大数:(10 0分)输入N个正整数,请你将它们连接在一起,排成一个最大的数。例如: N=4时,如 果四个正整数是7、13、18、2 4 6,则连接成的最大数为7 2 4 6 1 8 1 3 o输入:N ( 1 N 1 0)输出:连接成的最大数N个正整数(以空格相隔)输入输出样例:输入:N= 4输出:7 2 4 6 1 8 1 37131 82 4 6程序:program CS200502;vars:array1.10 of string;a:arra

24、y1.10 of integer;n,i,j:integer;t:string;beginwrite(N=);readln(n);for i:=1 to n do beginread(ai);str(ai,si);end;输入数据并转换为字符串readln;for i:=1 to n-1 dofor j:=i to n doif sisj then begint:=si;si:=sj;sj:=t;end;对字符串进行排序for i:=1 to n do write(si);输出结果 readln;end.三、扫雷游戏:(10 0分)有一种简单的扫雷游戏:在 N行2列的方格棋盘上,左列某些方格内

25、埋有地雷,而右 列每个方格中都有一个数字(。3 ) ,第I格的数字表示:左列第I 1、I、I+ 1格(即: 上、中、下三格)中埋雷的总数。如下所示:左图是初始状态,右图是扫雷完成状态(插小 旗的方格内有雷)。I 2 322- 2 2JaJilri,AJ11你的任务是:根据右列的数字分析出左列格子中的地雷(0表示无雷,1表示有雷) 并且统计出左列格子中地雷的总数。输入:N (2 N2 then begina3:=b2卜b1;a1:=0;a2:=b1卜a1;for i:=3 to n do beginai:=bi-1-ai-1-ai-2;if (ai0) and (ai1) then goto 1

26、;end;if anbn卜an-1 then goto 1;goto 2;1:a1:=1;a2:=b1-a1;for i:=3 to n do beginai:=bi-1-ai-1-ai-2;end;2:l:=0;for i:=1 to n do beginwrite(ai);if ai=1 then l:=l+1;end;writeln;writeln(L=,l);end;if n=2 thencase b1 of0:beginwriteln(0,0);writeln(L=,0);end;1:beginwriteln(0,1);writeln(1,0);writeln(L=,1);end;2

27、:beginwriteln(1,1);writeln(L=,2);end;end;readln; end.2006年长沙市计算机奥林匹克竞赛决赛试题(时间:120分钟)一、评选(1 0 0分)某班根据语文、数学、英语和计算机这四科成绩,评选学习积极分子。评选规则如下:(设:Y、S、E、J分别代表语文、数学、英语、计算机)1、四科平均成绩高于9 0分,可评为 A类学习积极分子。2、Y S E三科平均成绩高于8。分,而且 J不低于9。分,可评为B类学习积极分子。3、四科中最高分为1 0。分,最低分不低于6。分,可评为C类学习积极分子。4、一个学生只能被评为符合条件的最高一类学习积极分子(A类最高、

28、C类最低)。现在输入某个学生的四科成绩,请判断该学生能被评为哪一类学习积极分子。输入:四个整数Y S E J输出:A人或#8或#0:(分别表示 A类、B类、C类学习积极分子)若不符合任何评选条件,则输出“ NO”。样例:输入:YS,E,J=85 98 91 100输出:# A程序:program CS200601;var n,l,i:integer;a,b:array1.40 of integer;label 1,2;beginwrite(N=);readln(n);for i:=1 to n do read(bi);readln;if n2 then begina3:=b2-b1;a1:=0

29、;a2:=b1-a1;for i:=3 to n do beginai:=bi-1-ai-1-ai-2;if (ai0) and (ai1) then goto 1;end;if anbn-an-1 then goto 1;goto 2;1:a1:=1;a2:=b1-a1;for i:=3 to n do beginai:=bi-1-ai-1-ai-2;end;2:l:=0;for i:=1 to n do beginwrite(ai);if ai=1 then l:=l+1;end;writeln;writeln(L=,l);end;if n=2 thencase b1 of0:beginw

30、riteln(0,0);writeln(L=,0);end;1:beginwriteln(0,1);writeln(1,0);writeln(L=,1);end;2:beginwriteln(1,1);writeln(L=,2);end;end;readln;end.二、除法(1 0 0分)输入正整数N、M ,求N+M的值。如果商的小数部分出现循环节,则输出时要求用圆 括号将循环节括起来,如果商为整数,则输出为整数。例如:1 + 2=1+ 3=0.(3) 22 + 5= 33 + 3=11输入:N M输出:N+M的值(保证小数点后不超过5。位,而且未尾不能有多余的0)样例:输入:N,M=45

31、56输出:(571428)程序:program CS200602;varn,m:real;r,c:array0.50 of real;i,j,k,flag: integer;beginwrite(N,M=); readln(n,m);k:=0; flag:=1;if m0 then beginc0:=int(n/m); r0:=n-m*c0;while (rk0) and (flag=1) do beginck+1:=int(rk*10)/m); rk+1:=rk*10-m*ck+1;k:=k+1; i:=0;if k=50 then flag:=0;while (ik) and (flag=

32、1) do beginif (ri=rk) then flag:=0;i:=i+1;end;end;if r00 then write(c0:0:0, .) else write(c0:0:0);for j:=1 to i-1 do write(cj:0:0);if rk0 then write();if r00 then for j:=i to k do write(cj:0:0);if rk0 then writeln() else writeln; writeln;end else writeln(b=0);readln; end.三、删数(1 0 0分)输入一个长度为N的数字串,要求你

33、删掉其中的K个数字,使得剩下的数最大。例如:数字串为5123, K=1时,如果删掉的数字分别是5、1、2、3,则剩下的数分别为123、523、513、512,其中523是最大的。输入:第一行为两个整数N和K (1NW100, 0K 第二行是一个长度为N的数字串输出:删掉K个数字之后剩下的最大数样例:输入:N,K=4 15123输出:523程序:program CS200603;Var s:string;s是由键盘输入的高精度正整数n,k,a,b:integer;n是数字串的长度,k是要删掉的数字的个数t:boolean;t用于判断是否进行了删除操作beginwrite(N,K=);readln(n,k);readln(s);for a:=1 to k dobegin t:=false;for b:=1 to length(s) do if sbsb+1 then从数字串左边开始搜索,如果某一个数小于它后面的数,则删除此数begindelete(s,b,1);t:=true;break;end;if t=false then delete(s,(n-a+1),1);未执行删除操作,是说明所有存留的数大小相同或需 要删除的数在末尾,此时删除最后一个数。用 n-a+1确定最后一个数的位置end;end.writeln(s); readln;

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1