2013年南海区青少年信息学竞赛试题(小学甲组) 解题报告
更新时间:2023-12-30 16:59:01 阅读量: 教育文库 文档下载
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 页
NHOI’2013小学甲组试题
y:=(y-1) mod (c*2)+1; if y>c then
writeln(x*2+2,' ',c*2+1-y) else
writeln(x*2+1,' ',y); end;
close(input); close(output); end.
第四题 完全数
问题描述:
最近晨晨对数字很感兴趣,特别是她认为“完全数”是最美的数字,所谓完全数是真约数之和等于它本身的数。例如28的约数是1,2,4,7,14,并且1+2+4+7+14=28,所以28是完全数。晨晨想找出一段连续数据里面的所有完全数,如求x~y(2≤x≤y≤10000)中的完全数。但是她又感觉十进制的输出没有十六进制好看,所以她想把找到的完全数用十六进制输出,如果这段数据里面没有完全数就输出“no”。 输入格式:
一行:包括两个数,x y代表求x~y之间的完全数。 输出格式:
一行:x~y之间用十六进制表示的完全数,数之间用空格分开。 输入样例: 2 29 输出样例: 6 1C 问题分析:
求出给定范围内的所有完全数的十六进制。 算法分析:
数据范围较小,可以直接统计并转换为十六进制。
其实完全数的密度是很小的,题中给出的数据范围中只有5个完全数!只要分别判断一下在不在输入的范围内即可。 参考程序: //直接统计 var
x,y,i,j,s,t:longint; a:array[1..10] of longint; f:boolean;
第 5 页 共 10 页
NHOI’2013小学甲组试题
begin
assign(input,'yue.in'); reset(input); assign(output,'yue.out'); rewrite(output); read(x,y); for i:=x to y do begin s:=1;
for j:=2 to trunc(sqrt(i)) do if i mod j=0 then s:=s+j+i div j; if s=i then begin t:=0; while s>0 do begin inc(t);
a[t]:=s mod 16; s:=s div 16; end;
if f then write(' '); for j:=t downto 1 do if a[j]>9 then write(chr(a[j]+55)) else
write(a[j]); f:=true; end; end;
if not f then write('no'); writeln;
close(input); close(output); end.
第五题 学生代表
问题描述:
根据上级文件的通知,晨晨学校要挑选一个学生代表,参加区学生代表大会。学校领
第 6 页 共 10 页
NHOI’2013小学甲组试题
导想根据学生们平时的表现,找到一个各方面表现都比较平均的学生参加。
刚好,学生根据平时的表现都有自己的德育操行分r (1≤r≤1000),为了尽快找到这名代表,学校领导把学生排成n×n (2≤n≤99, n为奇数)队列,他叫每一行的同学找出自己行的德育操行分在中间位置的同学(所谓中间位置也就是行里面有一半的同学的操行分大于或等于这个学生的操行分数,并且同时有一半的学生的操行分小于或等于这个学生的操行分数)。然后,在每一行中间位置的这些学生中再次找出处于中间位置的那个学生。那么这个学生就是最后参加学生代表大会的学生了。
给出n×n的学生队列,找到其中的学生代表的操行分数。 输入格式:
第一行:一个整数n;
第2..n+1行:每一行有n个整数,分别代表这一行里面每个学生的操行分。 输出格式:
一个整数,学生代表的操行分数。 输入样例: 5
1 5 3 9 5 2 5 3 8 1 6 3 5 9 2 8 8 3 3 2 5 4 4 4 4 输出样例: 4
样例说明:第一行中间位置的为5,第二行为3、第三行为5、第四行为3、第五行为4。 然后在5 3 5 3 4中找到中间位置为4。 问题分析:
求出每一行的中位数的中位数。 算法分析:
直接排序寻找中位数。 参考程序: var
n,i,j,k,t:longint;
a,b:array[1..99] of longint; begin
assign(input,'perfect.in'); reset(input);
assign(output,'perfect.out'); rewrite(output); read(n);
for i:=1 to n do begin
for j:=1 to n do read(a[j]);
for j:=1 to n-1 do
第 7 页 共 10 页
NHOI’2013小学甲组试题
for k:=j+1 to n do if a[j]>a[k] then begin
t:=a[j]; a[j]:=a[k]; a[k]:=t; end;
b[i]:=a[n div 2+1]; end;
for i:=1 to n-1 do for j:=i+1 to n do if b[i]>b[j] then begin
t:=b[i]; b[i]:=b[j]; b[j]:=t; end;
writeln(b[n div 2+1]);
close(input); close(output); end.
第六题 拯救花园
问题描述:
一天,晨晨发现自己的n(2≤n≤100)只兔子跑到自己的花园里面,它们在尽情的吃着她的宝贝花卉。晨晨看在眼里痛在心里,她现在只能把兔子逐个的抓回笼子里面。而送每只兔子回去的时间都不同,例如送第i只兔子回去需要ti(1≤ti≤100)单位时间,那么晨晨送第i只兔子来回共需要花费2*ti单位时间,另外每一只兔子单位时间的破坏力都不同,例如第i只兔子单位时间内破坏di (1≤di≤100)朵花。
现在的问题是,晨晨如何安排送这n只兔子回笼子才能使这些兔子的破坏最小。 输入格式:
第一行:一个整数n(1≤n≤100);
接着有n行,每行两个空格分开的整数ti di,分别代表第i只兔子的送回去的时间,和单位时间破坏力。 输出格式:
一行:一个整数,代表这些兔子破坏多少花卉。 输入样例: 6 3 1 2 5 2 3 3 2 4 1
第 8 页 共 10 页
NHOI’2013小学甲组试题
1 6 输出样例: 86
样例解释:
晨晨送兔子回去的顺序分别为:6, 2, 3, 4, 1, 5。其中先送第6只兔子回去,剩余
兔子破坏(1+5+3+2+1)*2=24朵花;送第2只兔子回去,剩余兔子破坏(1+3+2+1)*4=28朵花;以此类推,送第3、4、1只兔子回去剩余兔子的破坏分别为16、12和6朵花;最后送第5只兔子回去的时候,没有兔子在花园里面了,所以破坏0朵花,最后总共破坏24 + 28 + 16 + 12 + 6 = 86朵花。 问题分析:
我们需要找到一个排列,使得∑D[i]*sum[i](1<=i<=n)最小。 其中sum[i]=∑T[j](1<=j<=i); 算法分析: 贪心。
因为这个序列中,任意两个互换都不会比该序列更优,所以我们只考虑两个的情况。 设最优序列中第一个为D1,T1;第二个为D2,T2。 那么有D2*T1*2 由此可以得出排在前面的数的Ti/Di>排在后面的数的Ti/Di。 所以,按Ti/Di排序即可。 参考程序: var n,i,j,p,ti,tot:Longint; s:double; t,d:array[1..100] of longint; f:array[1..100] of double; begin assign(input,'flowers.in'); reset(input); assign(output,'flowers.out'); rewrite(output); read(n); for i:=1 to n do begin read(t[i],d[i]); f[i]:=t[i]/d[i]; end; for i:=1 to n-1 do for j:=i+1 to n do if f[i]>f[j] then begin s:=f[i]; f[i]:=f[j]; f[j]:=s; p:=t[i]; t[i]:=t[j]; t[j]:=p; 第 9 页 共 10 页 NHOI’2013小学甲组试题 p:=d[i]; d[i]:=d[j]; d[j]:=p; end; ti:=0; for i:=1 to n do begin tot:=tot+ti*d[i]; ti:=ti+t[i]*2; end; writeln(tot); close(input); close(output); end. 第 10 页 共 10 页
正在阅读:
2013年南海区青少年信息学竞赛试题(小学甲组) 解题报告12-30
部编人教版一年级语文下册反义词、量词专项训练(反正面印一张即可)01-24
关于政府党支部2021年上半年党建工作总结及下半年工作安排08-04
各省军区独立师历史沿革04-25
电源电感功耗计算05-15
我的作家梦作文500字07-14
西方主流传媒新闻报道规范04-09
现代设计需要匠人精神_王宏飞05-20
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 南海区
- 竞赛试题
- 甲组
- 解题
- 青少年
- 小学
- 报告
- 信息
- 2013
- 基本概念1-原子结构 - 图文
- 仓储管理实务课程考试试题
- 中国食品企业社会责任分析研究报告2018年修订版 - 图文
- 2015年12月B级真题 - 图文
- 人民版历史必修三专题二第三课 中国古典文学的时代特色 导学案
- xxxx大学生物化学习题-答案
- 高中物理选修3-3测试题
- 成都市市政工程质量常见问题专项治理工作实施细则
- 国际私法习题及答案
- 2018年最新《课程与教学论》试题及答案
- 校园婚礼策划书 小组作业
- 《应用文写作》复习题
- 东北大学 一、博士研究生发表学术论文量化标准
- 工程质量管理心得
- 学科记忆专题 - 政治(超级记忆力养成计划笔记40)
- 山东科技大学OJ部分题目记答案
- 思修1
- 物流工程课程设计第一组
- 苏教版数学《认识几分之一》说课稿
- LED灯饰控制系统