2001年长沙市计算机奥林匹克竞赛决赛试题
(时间:120分钟)
一、(40分)键入一个字符串(串长不超过20),输出相应字符组成的等边三角形。
如:输入:“CHINA”
输出:
程序:
program CS200101;
var
s:string;
n,i,j:integer;
begin
write('Input a string:');
readln(s);
n:=length(s);
for i:=1 to n do begin
write('':40-i);
for j:=1 to i do write(s[j],' ');
writeln
end;
readln
end.
二、(50分)一光滑墙壁高X尺,有一个小虫从墙底部向上爬,每分钟爬Y尺。但每爬一分钟后都要休息一分钟,在休息期间又下滑一尺。编程:输入X和Y,计算该小虫最少几分钟可爬到顶端。
如:输入:X,Y=4,2
输出:5
程序:
program CS200102;
var x,y,s,n:integer;
begin
write('X,Y=');
readln(x,y);
if y>1 then begin
s:=0;n:=0;
repeat
s:=s+y;n:=n+1;
if s<>x then begin
s:=s-1;n:=n+1;
end;
until s>=x;
writeln(n);
end else writeln('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
程序:
program CS200103;
var
x,y,z,s,s1,n:longint;{s1为大“吱吱”的个数}
s2:array[1..24] of longint;{s2为小“吱吱”的个数,s2[1]代表第一天小“吱吱”的个数,依次类推}
begin
s:=0;s1:=0;s2[1]:=1;
write('X,Y,Z=');
readln(x,y,z);
for n:=x to z+1 do begin
s2[n]:=s1*y;{计算当天出生的小“吱吱”}
s1:=s1+s2[n-x+1];s2[n-x+1]:=0;{计算当天长大的“吱吱”,s2[n-x+1]为X个月前出生的小“吱
吱”个数}
end;
s:=s+s1;{将大“吱吱”数计入总数}
for n:=1 to z+1 do s:=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
程序:
program CS200104;
var A,B,C,D,E,sum,f1,f2,f3,total:integer;
function s(n1,n2,f:integer):integer;
begin
case f of
1:s:=n1+n2;
2:s:=n1-n2;
3:s:=n1*n2;
4:if (n2<>0) and (trunc(n1/n2)=n1 div n2) then s:=n1 div n2 else s:=-1000;
end;
end;
procedure wf(x:integer);
begin
case x of
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);
for f1:=1 to 4 do
for f2:=1 to 4 do
for f3:=1 to 4 do
if e=s(s(s(a,b,f1),c,f2),d,f3) then begin
total:=total+1;
字符串长度为0和50之间 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为你所在的学校名称(用拼音)
My number is X1My name is X2
My sex is X3
My school is X4
程序:
program CS200201;
begin
writeln('My number is 200201');
writeln('My name is XiaoMing');
writeln('My sex is boy');
writeln('My school is TongPuJie');
end.
二、字符(60分)
有一天,小明编了一个程序,能很快出一个字符串中出现次数最多的字符,你能做到吗?
输入:一个字符串(长度不超过50)
输出:按字符在字符串中出现的先后顺序,显示出现次数最多的字符
样例
输入:ACABBCCDDB
输出:CB
程序:
program CS200202;
var
a,b:string;
c:char;
d:array[1..50] of integer;{记录每一字符出现的次数,同时数组的序号也就代表了字符出现的先后次序}
i,j,max:integer;
begin
readln(a);
b:=a;{将字符串a赋值给b,起到保护输入的字符串a的作用。这一操作不是必须的,也可以直接对字符串a进行操作。但因后面的程序会造成对所操作的字符串内容的破坏,养成对输入内容进行保护的习惯有益的。}
for i:=1 to length(a) do begin
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论