2011年青岛市程序设计竞赛试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011年青岛市程序设计竞赛试题(小学组)答案
2011年09月02日信息来源:胶州市教育体育局作者:杨妮妮鲍
燕点击数:1840 审核者:胶州市教育体育局
(比赛时间60分钟,试题满分100分)
说明:1、必须以题目中规定的文件名进行保存,并用ftp上传到指定文件夹中。ftp上传使用说明在试题最后,请选手每做完一道题及时上传一次,以确保因机器故障引起的文件丢失。
2.使用竞赛规定的文件格式输入、输出。
(1)对于使用pascal语言的选手,请参照以下格式使用文件输入输出:Begin
Assign(input,’输入文件名’);assign(output,‘输出文件名’);
Reset (input);rrewrite(output);
……
Close(input);close(output);
End.
(2)对于c或c++选手,如果尚未掌握文件输入输出,请参考以下我们提供的一种方法进行文件输入输出。在主函数即main()的开始部分加入以下代码:
Freopen(“输入文件名”,”r”,stdin);
Freopen(“输出文件名”,“w”,stdout);
程序结束时无须像pascal选手一样,关闭文件,系统将自动关闭读写的文件。
对于c选手,请调用头文件stdio.h
对于c++选手,请调用头文件iostream
第1题水仙花数(程序文件名a1.pas,20分)
有一些100-999之间的整数具有这样的性质,该数的各位数字的立方之和等于该数本身,这种数人们把它称为水仙花数。例如153是个水仙花数,因为13+53+33=153。编程输入一三位正整数N(100<=n<=999),判断是否是水仙花数,如是输出整数1,不是输出整数0。
输入(A1.in):一行,一个整数n(100<=n<=999)
输出(a1.out):一行,一个整数。若N是水仙花数则输出1,否则输出0。样例1:
输入153
输出1
样例2:
输入:200
输出:0
参考答案:
program a1;
var a,b,c,n:integer;
input,output:text;
begin
assign(input,'a1.in');
assign(otuput,'a1.out');
reset(input);
rewrite(output);
read(input,n);
a:=n div 100;
b:=n mod 100 div 10;
c:=n mod 10;
if a*a*a+b*b*b+c*c*c=n then write(output,1)
else write(output,0);
close(input);
close(output);
end.
第2题:走阶梯(程序文件名a2.pas,20分)
有一个长阶梯,如果每步跨2阶最后剩1阶,如果每步跨3阶最后剩2阶,如果每步跨4阶最后剩3阶,如果每步跨5阶最后剩4阶,如果每步跨6阶最后剩5阶,只有当每步跨7阶时恰好走完,问这个阶梯有多少阶?输出(a2.out):一行,要求统计的结果。
参考答案:
program a2;
var i:integer;
output:text;
begin
assign(output,'a2.out');
rewrite(output);
for i:=1 to 1000 do
if (i mod 2=1) and (i mod 3=2) and (i mod 4=3) and (i mod 5=4) and (i mod 6=5) and (i mod 7=0) then write(output,i);
close(output);
end.
第3题:摘红苹果(程序文件名a3.pas,20分)
小明爷爷家有棵苹果树,树上高低不一的长了n个红苹果。一天,m个
小朋友到爷爷家做客,爷爷说:你们每人最多可以摘两个红苹果,而且只许伸手摘,不允许借助其它工具,摘下的苹果大家分享。由于小朋友的身高参差不齐,怎样才能使他们摘的苹果总数最多呢?请你计算小朋友们最多能摘到多少个苹果?
输入(a3.in):第1行,两个用空格隔开的整数n和m(n<=100,m<=20);
第2行,n个用空格隔开的整数,分别表示每个苹果的高度;
第3行,m个用空格隔开的整数,分别表示每个小朋友伸手能达到的高度(到达苹果即可摘到)。
输出a3.out:一行,一个整数,小朋友们最多能摘到的苹果数。
样例:
输入10 4
110 100 150 90 100 135 160 88 130 140
120 100 110 80
输出:5
参考答案:
program a3;
var m,n,i,j,c,d:integer;
a,b:array[1..1000] of integer;
input,output:text;
begin
assign(input,'a3.in');
assign(output,'a3.out');
reset(input);
rewrite(output);
read(input,n,m);
for i:=1 to n do
read(input,a[i]);
for i:=1 to m do
read(input,b[i]);
for i:=1 to m-1 do
for j:=i+1 to m do
if b[i]>b[j] then begin
c:=b[i];
b[i]:=b[j];
b[j]:=c;
end;
for i:=1 to m do
begin
c:=0;
for j:=1 to n do
if (b[i]>=a[j]) and (c<2) then begin
c:=c+1;