20XX年南海区青少年信息学竞赛试题(小学甲组) 解题报告

  NHOI’20XX小学甲组试题
  20XX年南海区青少年信息学奥林匹克竞赛试题
  (小学甲组)
  注意事项:
  1. 本次竞赛将使用评测系统进行自动评测,以源程序的测试结果为准。
  2. 要利用文件严格按题目要求的格式进行输入输出,否则将被判为错误而不得分。
  3. 所有文件要按试卷指定的文件名命名,程序中不要使用绝对路径,否则将无法测试而被判为0分。
  4. 比赛结束前,要将最完善的源程序集中保存到以选手考号加姓名命名的文件夹中(例如:XJ372陈才),该文件夹中不能再设子文件夹;同时还要在选手程序文件夹中建一个文件“程序清单.txt”,文件内容写清上交的程序文件名。
  5. 现场编程3小时,每测试点时间限制1秒、内存限制128M,每题50分,总分300分。 6. 各题程序及数据文件名规定: 题 号 试题名称 输入文件名 输出文件名 第一题 字母统计 第二题 魔法袋
子  第三题 排座位  第四题 完全数  第五题 学生代表  第六题 拯救花园  程序文件名  第一题  字母统计
  问题描述:
  晨晨刚上幼儿园,对字母很感兴趣,特别是对‘b’、‘B’、‘m’、‘M’四个字母感觉很亲切,因为这四个字母很像“爸”、“妈”的发音。每次看到一段英文文章,她都要数一数文章里面有多少个上面四个字母。于她刚学数数,数不准,想让大哥哥、大帮她数一下,你能帮她吗? 输入格式:
  一行:输入一段以‘#‘结束的字符串。 输出格式:
  一行:一个整数代表字符串出现了多少个‘b’、‘B’、‘m’、‘M’字母。 输入样例:
  Thanks for being there, mom. Happy Mother’s Day.# 输出样例: 4
  第 1 页 共 10 页
  NHOI’20XX小学甲组试题
  数据范围:
  对于80%的数据,字符串长度小于255; 对于100%的数据,字符串长度小于1000; 问题分析:
  给出一串字符串,统计出字符串中出现了多少个‘b’、‘B’、‘m’、‘M’字母。 算法分析: 直接统计。 参考程序: var  ch:char;  s:longint; begin
  assign(input,''); reset(input);  assign(output,''); 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’20XX小学甲组试题
  输入样例: 5 3
  2 1 3 4 10 输出样例: 3
  问题分析:
  统计给出的n件礼物中,有多少件礼物的半径≤魔法袋半径。 算法分析: 直接统计。 参考程序: var
  n,x,r,i,s:longint; begin
  assign(input,''); reset(input);  assign(output,''); rewrite(output);  read(n,r);  for i:=1 to n do  begin  read(x);  if xc 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中的完全数。但是她又感觉十进制的输出没有十六进制好看,所以她想把到的完全数用十六进制输出,如果这段数据里面没有完全数就输出“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’20XX小学甲组试题
  begin
  assign(input,''); reset(input);  assign(output,''); 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’20XX小学甲组试题
  导想根据学生们平时的表现,到一个各方面表现都比较平均的学生参加。
  刚好,学生根据平时的表现都有自己的德育操行分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,''); reset(input);
  assign(output,''); 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’20XX小学甲组试题
  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只兔子跑到自己的花园里面,它们在尽情的吃着她的宝贝花卉。晨晨看在眼里痛在心里,她现在只能把兔子逐个的抓回笼子里面。而送每只兔子回去的时间都不同,例如送第i只兔子回去需要ti(1≤ti≤100)单位时间,那么晨晨送第i只兔子来回共需要花费2*ti单位时间,另外每一只兔子单位时间的破坏力都不同,例如第i只兔子单位时间内破坏di (1≤di≤100)朵花。
字符串长度为0  现在的问题是,晨晨如何安排送这n只兔子回笼子才能使这些兔子的破坏最小。 输入格式:
  第一行:一个整数n(1≤n≤100);
  接着有n行,每行两个空格分开的整数ti di,分别代表第i只兔子的送回去的时间,和单位时间破坏力。 输出格式:
  一行:一个整数,代表这些兔子破坏多少花卉。 输入样例: 6 3 1 2 5 2 3 3 2 4 1
  第 8 页 共 10 页
  NHOI’20XX小学甲组试题
  1 6 输出样例: 86
  样例解释:
  晨晨送兔子回去的顺序分别为:6, 2, 3, 4, 1, 5。其中先送第6只兔子回去,剩余
  兔子破坏(1+5+3+2+1)*2=24朵花;送第2只兔子回去,剩余兔子破坏*4=28朵花;以此类推,送第3、4、1只兔子回去剩余兔子的破坏分别为16、12和6朵花;最后送第5只兔子回去的时候,没有兔子在花园里面了,所以破坏0朵花,最后总共破坏24 + 28 + 16 + 12 + 6 = 86朵花。 问题分析:
  我们需要到一个排列,使得∑D[i]*sum[i](1排在后面的数的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,''); reset(input);
  assign(output,''); 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’20XX小学甲组试题
  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 页
  NHOI’20XX小学甲组试题
  20XX年南海区青少年信息学奥林匹克竞赛试题
  (小学甲组)
  注意事项:
  1. 本次竞赛将使用评测系统进行自动评测,以源程序的测试结果为准。
  2. 要利用文件严格按题目要求的格式进行输入输出,否则将被判为错误而不得分。
  3. 所有文件要按试卷指定的文件名命名,程序中不要使用绝对路径,否则将无法测试而被判为0分。
  4. 比赛结束前,要将最完善的源程序集中保存到以选手考号加姓名命名的文件夹中(例如:XJ372陈才),该文件夹中不能再设子文件夹;同时还要在选手程序文件夹中建一个文件“程序清单.txt”,文件内容写清上交的程序文件名。
  5. 现场编程3小时,每测试点时间限制1秒、内存限制128M,每题50分,总分300分。 6. 各题程序及数据文件名规定: 题 号 试题名称 输入文件名 输出文件名 第一题 字母统计 第二题 魔法袋子  第三题 排座位  第四题 完全数  第五题 学生代表  第六题 拯救花园  程序文件名  第一题  字母统计
  问题描述:
  晨晨刚上幼儿园,对字母很感兴趣,特别是对‘b’、‘B’、‘m’、‘M’四个字母感觉很亲切,因为这四个字母很像“爸”、“妈”的发音。每次看到一段英文文章,她都要数一数文章里面有多少个上面四个字母。于她刚学数数,数不准,想让大哥哥、大帮她数一下,你能帮她吗? 输入格式:
  一行:输入一段以‘#‘结束的字符串。 输出格式:
  一行:一个整数代表字符串出现了多少个‘b’、‘B’、‘m’、‘M’字母。 输入样例:
  Thanks for being there, mom. Happy Mother’s Day.# 输出样例: 4
  第 1 页 共 10 页
  NHOI’20XX小学甲组试题
  数据范围:
  对于80%的数据,字符串长度小于255; 对于100%的数据,字符串长度小于1000; 问题分析:
  给出一串字符串,统计出字符串中出现了多少个‘b’、‘B’、‘m’、‘M’字母。 算法分析: 直接统计。 参考程序: var  ch:char;  s:longint; begin
  assign(input,''); reset(input);  assign(output,''); 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’20XX小学甲组试题
  输入样例: 5 3
  2 1 3 4 10 输出样例: 3
  问题分析:
  统计给出的n件礼物中,有多少件礼物的半径≤魔法袋半径。 算法分析: 直接统计。 参考
程序: var
  n,x,r,i,s:longint; begin
  assign(input,''); reset(input);  assign(output,''); rewrite(output);  read(n,r);  for i:=1 to n do  begin  read(x);  if xc 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中的完全数。但是她又感觉十进制的输出没有十六进制好看,所以她想把到的完全数用十六进制输出,如果这段数据里面没有完全数就输出“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 页
 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。