长沙市小学生计算机奥林匹克竞赛决赛题答案Word下载.docx
《长沙市小学生计算机奥林匹克竞赛决赛题答案Word下载.docx》由会员分享,可在线阅读,更多相关《长沙市小学生计算机奥林匹克竞赛决赛题答案Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
>
xthenbegin
=s-1;
untils>
=x;
writeln(n);
endelsewriteln('
Never'
三、(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;
x,y,z,s,s1,n:
longint;
{s1为大“吱吱”的个数}
s2:
array[1..24]oflongint;
{s2为小“吱吱”的个数,s2[1]代表第一天小“吱吱”的个数,依次类推}
s1:
s2[1]:
=1;
X,Y,Z='
readln(x,y,z);
forn:
=xtoz+1dobegin
s2[n]:
=s1*y;
{计算当天出生的小“吱吱”}
s1:
=s1+s2[n-x+1];
s2[n-x+1]:
{计算当天长大的“吱吱”,s2[n-x+1]为X个月前出生的小“吱吱”个数}
=s+s1;
{将大“吱吱”数计入总数}
=1toz+1dos:
=s+s2[n];
{将小“吱吱”数计入总数}
writeln(s);
四、(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:
functions(n1,n2,f:
integer):
begin
casefof
1:
s:
=n1+n2;
2:
=n1-n2;
3:
=n1*n2;
4:
if(n2<
0)and(trunc(n1/n2)=n1divn2)thens:
=n1divn2elses:
=-1000;
procedurewf(x:
integer);
casexof
write('
+'
-'
*'
/'
total:
A,B,C,D,E='
readln(a,b,c,d,e);
forf1:
=1to4do
forf2:
forf3:
ife=s(s(s(a,b,f1),c,f2),d,f3)thenbegin
=total+1;
('
'
a);
wf(f1);
write(b,'
)'
wf(f2);
write(c,'
wf(f3);
writeln(d,'
='
e)
writeln('
TOTAL='
total);
readln;
2002年长沙市计算机奥林匹克竞赛决赛试题
一、填信息(20分)
小明对信息学很感兴趣,他报名参加今年的小学生电脑奥赛,报名时老师要求他填写自己的相关信息。
现在,请你将自己的相关信息打印出来。
显示格式要求如下:
说明:
X1为你的决赛证编号
X2为你的姓名(用拼音)
X3为你的性别(男生用boy,女生用girl)
X4为你所在的学校名称(用拼音)
MynumberisX1
MynameisX2
MysexisX3
MyschoolisX4
programCS200201;
writeln('
Mynumberis200201'
MynameisXiaoMing'
Mysexisboy'
MyschoolisTongPuJie'
二、找字符(60分)
有一天,小明编了一个程序,能很快找出一个字符串中出现次数最多的字符,你能做到吗?
一个字符串(长度不超过50)
按字符在字符串中出现的先后顺序,显示出现次数最多的字符
样例
输入:
ACABBCCDDB
CB
programCS200202;
a,b:
c:
char;
d:
array[1..50]ofinteger;
{记录每一字符出现的次数,同时数组的序号也就代表了字符出现的先后次序}
i,j,max:
readln(a);
b:
=a;
{将字符串a赋值给b,起到保护输入的字符串a的作用。
这一操作不是必须的,也可以直接对字符串a进行操作。
但因后面的程序会造成对所操作的字符串内容的破坏,养成对输入内容进行保护的习惯有益的。
}
fori:
=1tolength(a)dobegin
=b[i];
d[i]:
ifc<
.'
Then
=itolength(a)dobegin
ifc=b[j]thenbegin
=d[i]+1;
b[j]:
;
{每找到一个相同的字符就把此字符赋值为’.’,这样就不会重复寻找相同的字符,在d数组中每个字符出现次数的记录将是唯一的。
end;
max:
=d[1];
=2tolength(a)doifd[i]>
maxthenmax:
=d[i];
{寻找字符出现的最大次数}
=1tolength(a)doifd[i]=maxthenwrite(a[i]);
{按次序输出出现资料最多的字符}
writeln;
readln;
三、拼三角(60分)
有一次,老师给小明N根小木棒,要他从中选出K根,使这K根当中的任意三根都能拼成一个三角形。
老师告诉他,构成一个三角形的条件是:
任意两边之和大于第三边,任意两边之差小于第三边。
小明思考后,发现将这些小木棒按长短顺序排列后,很容易解决问题。
请你用表达式RANDOM(900)随机产生N个正整数(表示小木棒的长度),帮小明求出K的最大值。
N(3≤N≤500)
K的最大值
6
排序后的6个随机数为:
19,26,161,220,348,529
3
programCS200203;
{基本思路:
如果三角形中二条较小边的和大于最大边,则此三条边可以构成三角形。
对于有序排列的数,只要确定了能构成三角形的最小数和最大数,中间的每一个数都符合条件}
n,k,i,j,t,l:
array[1..500]ofinteger;
ok:
boolean;
readln(n);
a[i]:
=random(900)+1;
{生成随机数并赋值给数组a}
=1tondowrite(a[i]:
5);
{显示生成的随机数,调试用}
=1ton-1do
=i+1tondo
ifa[i]>
a[j]thenbegin
t:
=a[i];
a[i]:
=a[j];
a[j]:
=t;
{对生成的随机数从小到大进行排序}
{显示排序结果,调试用}
=1ton-2dobegin
=false;
l:
=n;
ifa[i]+a[i+1]>
a[l]thenok:
=trueelsel:
=l-1;
untilokor(l=i+1);
{对于每根小棒寻找能够构成三角形的最长小棒在数组a中的位置l}
ifokthenb[i]:
=l-i+1;
{得到能与当前小棒组成三角形的小棒数量}
=1tondowrite(b[i]:
k:
=b[1];
=2tondo
ifb[j]>
kthenk:
=b[j];
K='
k);
四、数的统计(60分)
一个数“含有0”是指这个数至少有某一位数字为0。
小明对那些“含有0”的自然数很感兴趣,想挑出来进行研究。
那么,1~N当中“含有0”的自然数有多少个?
小明想在1秒钟内得到答案,你能帮他做到吗?
N(1≤N≤100000000)
105
15
programCS200204;
varn,i,l:
str(i,s);
ifpos('
0'
s)<
0thenl:
=l+1;
writeln(l);
2004年长沙市计算机奥林匹克竞赛决赛试题
一、求和(30分)
由键盘输入正整数N(N≤100),求1到N之间所有的5的倍数之和S。
例:
N=10
S=15 (因为1~10之间只有5和10是5的倍数)
二、文本图形(50)
由键盘输入正整数N(N≤21)和一个字符串A(A由N个任意的大写字母组成),要求输出一个左右对称的N行的文本图形。
N=4
A=ABCD
programCS200402;
n,i,j,k:
a:
N='
readln(n);
A='
41-i);
=1toidowrite(a[j]);
fork:
=i-1downto1dowrite(a[k]);
writeln;
三、找数(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:
label1;
N,K='
readln(n,k);
form:
=1to30000dobegin
=n*m;
=true;
str(s,a);
{将s转换为字符串a}
=0tokdobegin
str(i,b);
ifpos(b,a)=0thent:
{如果0~k之间有一个数不包含在a当中,则令逻辑指针为假}
=k+1to9dobegin
str(j,b);
ifpos(b,a)<
0thent:
{如果k~9之间有一个数包含在a当中,则令逻辑指针为假}
ift=truethengoto1;
{找到符合条件的m值,跳转输出部分}
1:
ift=truethenwriteln('
M='
m)elsewriteln('
Nofind!
四、求倍数及“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:
=n*4;
{得到S的位数。
=1to4*idobegin
=jmod4;
caselof
0:
=2;
=4;
2,3:
{生成An。
为方便运算,生成的An为4002……40024002的形式,第一位为个数}
=1tokdobegin
s[m]:
=s[m]+a[m];
ifs[m]>
=10thenbegin
=s[m]mod10;
a[m+1]:
=a[m+1]+1;
{逢10进1}
{将An累加进s}
z:
=1to4*ndoifs[i]=0thenz:
=z+1;
{统计0的个数}
k,'
Z='
5,z);
2005年长沙市计算机奥林匹克竞赛决赛试题
一、拆分整数:
(100分)
输入一个正整数N,如果N是偶数,则拆分N的各个数字相加求和;
如果N是奇数,则拆分N的各个数字相乘求积。
输入输出样例:
N=126 输出:
H=9
N=123 输出:
J=6
programCS200501;
n,h,j,l,i,t:
array[1..10]ofinteger;
i:
ift>
10then
=tmod10;
=tdiv10;
i:
=i+1;
untilt<
10;
{拆分N的各个数字,存放在数组a中}
str(n,s);
{将数n转换为字符串s}
{取s长度,即得到数n的位数}
h:
j:
ifnmod2=0thenbegin
=1toldoh:
=h+a[i];
H='
h);
endelsebegin
=1toldoj:
=j*a[i];
J='
j);
{根据N的奇偶求和或求积}
二、排最大数:
输入N个正整数,请你将它们连接在一起,排成一个最大的数。
例如:
N=4时,如果四个正整数是7、13、18、246,则连接成的最大数为72461813。
N(1≤N≤10) 输出:
连接成的最大数
N个正整数(以空格相隔)
N=4 输出:
72461813
7 13 18 246
programCS200502;
array[1..10]ofstring;
read(a[i]);
str(a[i],s[i]);
{输入数据并转换为字符串}
=itondo
ifs[i]<
s[j]thenbegin
=s[i];
s[i]:
=s[j];
s[j]:
{对字符串进行排序}
=1tondowrite(s[i]);
{输出结果}
三、扫雷游戏:
有一种简单的扫雷游戏:
在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:
array[1..40]ofinteger;
label1,2;
=1tondoread(b[i]);
ifn>
2thenbegin
a[3]:
=b[2]-b[1];
a[1]:
a[2]:
=b[1]-a[1];
=3tondobegin
=b[i-1]-a[i-1]-a[i-2];
if(a[i]<
0)and(a[i]<
1)thengoto1;
ifa[n]<
b[n]-a[n-1]thengoto1;
goto2;
write(a[i]);
ifa[i]=1thenl:
L='
l);
ifn=2then
caseb[1]of
writeln(0,0);
0);
writeln(0,1);
writeln(1,0);
1);
writeln(1,1);
2);
2006年长沙市计算机奥林匹克竞赛决赛试题
一、评选(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(分别表