小学生信息学奥赛决赛题xx年决赛答案Word文件下载.docx
- 文档编号:16308943
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:6
- 大小:19.98KB
小学生信息学奥赛决赛题xx年决赛答案Word文件下载.docx
《小学生信息学奥赛决赛题xx年决赛答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《小学生信息学奥赛决赛题xx年决赛答案Word文件下载.docx(6页珍藏版)》请在冰豆网上搜索。
问:
总共可听到多少声花炮响?
输入:
n
a1a2?
an b
输出:
一个整数
3 输出:
7 123 4解题思路:
用数组的下标表示时间,元素的值不为0表示听到花炮响。
用同一个数组来标示所有人放花炮的过程,同时响的花炮在数组中会被记录在同一元素中。
最后统计数组中有数据的元素个数,就能得出共听到了多少声花炮响。
这一方法还可以求出在某一时刻,同时有多少个花炮一起响。
程序:
programCS200802;
var
n,b,i,j,k,s:
integer;
a:
array[1..100]ofinteger;
c:
array[1..10000]ofinteger;
{用于记录花炮响。
最多100个,间隔最大100,下标范围到10000可满足条件}begin
readln(n);
fori:
=1tondoread(a[i]);
{为保证输入格式,此处用read(),不用readln()}readln(b);
c[1]:
=n;
{第一个花炮同时放响}
fori:
=1tondobegin{1至n代表放花炮的每个人} k:
=1;
{第一个花炮响的时间}
forj:
=2tobdobegin{2至b代表从第2个到第b个花炮} k:
=k+a[i];
{依次得到花炮响的时间}
c[k]:
=c[k]+1;
{将花炮响时间记录到数组c中} end;
end;
s:
=0;
=1to10000doifc[i]0thens:
=s+1;
{求一共听到多少次花炮响}writeln(s);
{fori:
=1to10000doifc[i]0thenwrite(i:
3);
writeln;
=1to10000doifc[i]0thenwrite(c[i]:
}{输出所有花炮响的时刻及有多少花炮同时响}
readlnend.
三、文档编辑
暑假当中,妈妈让小慧帮忙修改英文资料,英文中还有一些统计数据。
妈妈说:
如果文档结尾处有“end”,则应当删除,文中所有的统计数据都要加上一个正整数m。
你能编程序完成小慧的任务吗?
m
待修改的文档输出:
修改后的文档例如:
13
Thereare45studentsin 输出:
Thereare58studentsin32class.解题思路:
这个题目两个问题构成,一个是处理文档结尾处的“end”。
一个是处理统计数据。
处理文档结尾处的“end”,需要判断出文档最后三个字母是不是“end”。
先用length函数求出文档的长度,再copy函数截取文档最后三个字母和“end”进行比较。
处理统计数据关键在于获取空格的位置。
利用pos函数可以取得空格的位置。
在处理整个文档时,先处理文档结尾处的“end”,然后一个一个单词进行处理。
处理完一个单词就输出一个单词并从字符串中删除此单词及其后的空格。
遇到统计数据则按题目要求处理。
需要注意的是,依题意,文档开头和结尾的数据不作统计数据处理。
programCS200803;
m,n:
longint;
l,i,c,k:
s,s1:
string;
begin
readln(m);
readln(s);
l:
=length(s);
ifcopy(s,l-2,3)='
end'
thendelete(s,l-2,3);
{删除文档结尾的'
}k:
=pos('
'
s);
{查找第一个空格的位置}fori:
=1tokdowrite(s[i]);
delete(s,1,k);
{输出并删除文档第一个单词。
这一步主要是为了解决第一个单词是数据的情况,依题意,因前面没有空格,不做统计数据处理}repeat
if(char(s[1])>
=char('
0'
))and(char(s[1])k:
s1:
=copy(s,1,k-1);
val(s1,n,c);
{将此单词转换为数值}
ifc=0then{c=0则意味着转换过程中没有出错,单词完全数字组成} begin
write(n+m,'
);
endelsebegin
delete(s,1,k);
end;
endelsebegin;
{c0,意味着转换过程出错,单词不是统计数据} k:
untilpos('
s)=0;
{处理到最后一个空格为此,后面的不可能再为统计数据,因后面没有空格了}
write(s);
{输出文档的剩余部分}readlnend.
四、智力冲浪
小慧准备参加湖南电视台举办的智力冲浪节目。
规则如下:
冲浪者首先拥有m个快乐金球。
冲浪当中设有n个游戏项目,每个游戏项目都必须在整分钟时开始,限时1分钟,而且都规定了最后完成期限。
如果一个游戏项目没按规定完成,则从冲浪者的快乐金球中扣掉一部分,不同游戏项目扣掉的金球数也不同。
游戏项目的顺序自己安排。
最终,赢得快乐金球数最多的选手胜出。
小慧非常想夺得冠军,请你计算出小慧最多能赢得多少个快乐金球?
mn n个整数,分别表示每个游戏项目规定的完成期限 n个整数,分别表示每个游戏项目未完成时扣掉的金球数输出:
一个整数例如:
100007
4243146
20607040305010输出:
9950程序:
programCS200804;
m,n,i,j,t,time,s:
a,b,c:
array[1..50]ofinteger;
flag:
boolean;
readln(m,n);
=1tondoread(b[i]);
=1tondom:
=m-b[i];
=1tondo
=i+1tondobegin ifa[i]>
a[j]thenbegin
t:
=a[i];
a[i]:
=a[j];
a[j]:
=t;
t:
=b[i];
b[i]:
=b[j];
b[j]:
end;
{按照完成期限短至长排序}fori:
=i+1tondobegin
if(a[i]=a[j])and(b[i]t:
{相同完成期限的按从大到小排序}{fori:
=1tondowrite(a[i]:
writeln;
=1tondowrite(b[i]:
}{测试用,查看排序结果}fori:
=itondoif(a[j]=i)and(b[j]>
c[i])thenbegin c[i]:
end;
{将每一完成期限的第一个值,即金球数最多的值填入数组c,数组c的下标对应完成期限}
=1tondowrite(c[i]:
}{测试用}fori:
=i+1tondobegin if(b[i]t:
{将剩余的数据从大到小排序}fori:
=itondoif(a[j]>
i)and(c[i]=0)thenbegin c[i]:
{将数据按照完成期限填入到数组C的空位中}fori:
{将剩余的数据按完成期限从短到长排序}fori:
i)and(b[j]>
{用剩余的数据替换完成期限比它短,数值比它小的数}{fori:
=m+c[i];
writeln(m);
readln;
readlnend.
readlnend.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小学生 信息学 决赛 xx 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)