当前位置:首页 > 2013年南海区青少年信息学竞赛试题(小学甲组) 解题报告
NHOI’2013小学甲组试题
2013年南海区青少年信息学奥林匹克竞赛试题
(小学甲组)
注意事项:
1. 本次竞赛将使用评测系统进行自动评测,以源程序的测试结果为准。
2. 要利用文件严格按题目要求的格式(参考输入输出样例)进行输入输出,否则将被判为错误而不得分。
3. 所有文件要按试卷指定的文件名命名,程序中不要使用绝对路径,否则将无法测试而被判为0分。
4. 比赛结束前,要将最完善的源程序集中保存到以选手考号(字母用大写)加姓名命名的文件夹中(例如:XJ372陈才),该文件夹中不能再设子文件夹;同时还要在选手程序文件夹中建一个文本文件“<姓名>程序清单.txt”,文件内容写清上交的程序文件名。
5. 现场编程3小时,每测试点时间限制1秒、内存限制128M,每题50分,总分300分。 6. 各题程序及数据文件名规定: 题 号 试题名称 输入文件名 输出文件名 第一题 字母统计 第二题 魔法袋子 bag.pas bag.in bag.out 第三题 排座位 seat.pas seat.in seat.out 第四题 完全数 yue.pas yue.in yue.out 第五题 学生代表 perfect.pas perfect.in perfect.out 第六题 拯救花园 flowers.pas flowers.in flowers.out 程序文件名 count.pas count.in count.out 第一题 字母统计
问题描述:
晨晨刚上幼儿园,对字母很感兴趣,特别是对‘b’、‘B’、‘m’、‘M’四个字母感觉很亲切,因为这四个字母很像“爸”、“妈”的发音。每次看到一段英文文章,她都要数一数文章里面有多少个上面四个字母。由于她刚学数数,数不准,想让大哥哥、大姐姐帮她数一下,你能帮她吗? 输入格式:
一行:输入一段以‘#‘结束的字符串。 输出格式:
一行:一个整数代表字符串出现了多少个‘b’、‘B’、‘m’、‘M’字母。 输入样例:
Thanks for being there, mom. Happy Mother’s Day.# 输出样例: 4
第 1 页 共 10 页
NHOI’2013小学甲组试题
数据范围:
对于80%的数据,字符串长度小于255; 对于100%的数据,字符串长度小于1000; 问题分析:
给出一串字符串,统计出字符串中出现了多少个‘b’、‘B’、‘m’、‘M’字母。 算法分析: 直接统计。 参考程序: var ch:char; s:longint; begin
assign(input,'count.in'); reset(input); assign(output,'count.out'); rewrite(output); read(ch); while ch<>'#' do begin
if (ch='b') or (ch='B') or (ch='m') or (ch='M') then inc(s); read(ch); end; writeln(s);
close(input); close(output); end.
第二题 魔法袋子
问题描述:
由于晨晨在幼儿园表现很好,圣诞节的时候,圣诞老人送给了她一个魔法袋。这个魔法袋袋口是圆形的,而且知道袋口的半径为r(不含袋口壁厚度),袋子很深可以装下很多东西,但是规定只能装圆形的物品,刚好晨晨圣诞节收到的礼物都是圆形的。现在晨晨想把自己的礼品都放进魔法袋里面。已知晨晨所有礼物的半径,请问你能帮晨晨统计一下有多少个礼物可以放进魔法袋里面呢? 输入格式:
第一行:包括空格分开的两个整数 n r分别代表晨晨礼物数量和魔法袋半径(n,r≤10000000)。
第二行:n个整数代表晨晨礼物的半径(半径≤10000000)。 输出格式:
一个整数,魔法袋能放进礼物的数量。
半径:r 第 2 页 共 10 页 NHOI’2013小学甲组试题
输入样例: 5 3
2 1 3 4 10 输出样例: 3
问题分析:
统计给出的n件礼物中,有多少件礼物的半径≤魔法袋半径。 算法分析: 直接统计。 参考程序: var
n,x,r,i,s:longint; begin
assign(input,'bag.in'); reset(input); assign(output,'bag.out'); rewrite(output); read(n,r); for i:=1 to n do begin read(x); if x<=r then inc(s); end; writeln(s);
close(input); close(output); end.
第三题 排座位
问题描述:
六一儿童节当天,晨晨学校举行“庆六一”活动,活动在体育馆举行,这次座位是按学号“之”字形排列,如下图是20位学生安排在4行×5列的座位上的排列情况。
列─→ 行 ∣ 1 ↓ 1 1 2 2 9 12 19 3 3 8 13 18 4 4 7 14 17 5 5 6 15 16 2 3 4 10 11 20
第 3 页 共 10 页
NHOI’2013小学甲组试题
现在存在的一个问题是,如何让学生根据自己的学号很快的知道自己所在位置(也就是自己位置的行、列)。 输入格式:
第一行:包括两个数,R和C(1≤R,C≤100),表示座位共有R行C列。 第二行:一个整数n(1≤n≤R*C),代表有n个学生想知道自己的具体位置。 接下来n行:每一行一个整数,代表询问座位位置学生的学号。 输出格式:
输出n行,每一行两个整数,代表询问位置学生的所在的行和列。 输入样例: 4 5 3 4 13 19
输出样例: 1 4 3 3 4 2 问题分析:
计算出按照题意排列的方阵中给出的编号的位置。 算法分析:
数据范围较小,可以直接生成方阵。
当然也可以直接计算:因为经过两行又回到了第一列,所以可以把两行看作一个循环节,计算出该编号在第几个循环节的第几个位置。 参考程序: //直接计算 var
r,c,x,y,n,i:longint; begin
assign(input,'seat.in'); reset(input); assign(output,'seat.out'); rewrite(output); read(r,c,n); for i:=1 to n do begin read(y);
x:=(y-1) div (c*2);
第 4 页 共 10 页
共分享92篇相关文档