要多复习这些题!
牛吃草问题,简便计算,工程问题,浓度问题,植树问题,图形题,盈亏问题,行程问题,倒推法解题,比的应用题,逻辑推理,流水行船问题,找规律,平均数问题,差倍问题,算式谜,周期问题,还原问题,假设法解题等等。
你还可以买本奥数书看,在网上找试卷来做。
最后祝你考个好成绩!
一、整数处理(100分)(存盘程序名:T1)
电脑老师让小慧编程做一道题:输入一个正整数A(A≤100000000),如果A的个位数字是5,则统计A能被5整除多少次?否则,统计A当中含有多少个“0”?你能做吗?
例如:输入:125 输入:305160
输出:3 输出:2
程序:
program cs200801;
var
a:longint;{根据A的取值范围,采用长整型}
n:integer;
begin
readln(a);
n:=0;
if a mod 10=5 then
repeat
a:=a div 5;
n:=n+1;
until a mod 5<>0{统计A能被5带除多少次}
else begin
repeat
if a mod 10=0 then n:=n+1;
a:=a div 10;
until a<10;{统计A当中含有多少个0}
end;{采用if……then……else……结构,以符合题目的逻辑关系}
writeln(n);
readln
end.
二、新年同庆(100分)(存盘程序名:T2)
过年了,小慧与邻居邻居的小伙伴共n人相约一起放花炮:他们同时放响了第一个,随后n个人分别以a1、a2、a3、……、an秒的间隔继续放花炮,每人都放了b个。问:总共可听到多少声花炮响?
输入:n(n≤10)
a1 a2 …… an(每个数≤100,以空格相隔)
b(b≤100)
输出:一个整数(听到的花炮响声数)
例如:输入:3 输出:7
1 2 3
4
解题思路:
用数组的下标表示时间,元素的值不为0表示听到花炮响。用同一个数组来标示所有人放花炮的过程,同时响的花炮在数组中会被记录在同一元素中。最后统计数组中有数据的元素个数,就能得出共听到了多少声花炮响。这一方法还可以求出在某一时刻,同时有多少个花炮一起响。
程序:
program CS200802;
var
n,b,i,j,k,s:integer;
a:array[1..100] of integer;
c:array[1..10000] of integer;{用于记录花炮响。最多100个,间隔最大100,下标范围到10000可满足条件}
begin
readln(n);
for i:=1 to n do read(a[i]);{为保证输入格式,此处用read(),不用readln()}
readln(b);
c[1]:=n;{第一个花炮同时放响}
for i:=1 to n do begin{1至n代表放花炮的每个人}
k:=1;{第一个花炮响的时间}
for j:=2 to b do begin{2至b代表从第2个到第b个花炮}
k:=k+a[i];{依次得到花炮响的时间}
c[k]:=c[k]+1;{将花炮响时间记录到数组c中}
end;
end;
s:=0;
for i:=1 to 10000 do if c[i]<>0 then s:=s+1;{求一共听到多少次花炮响}
writeln(s);
{for i:=1 to 10000 do if c[i]<>0 then write(i:3);
writeln;
for i:=1 to 10000 do if c[i]<>0 then write(c[i]:3);}{输出所有花炮响的时刻及有多少花炮同时响}
readln
end.
三、文档编辑(100分)(存盘程序名:T3)
暑假当中,妈妈让小慧帮忙修改英文资料,英文中还有一些统计数据(统计数据都是正整数,而且其前、后都有空格)。妈妈说:如果文档结尾处有“end”,则应当删除,文中所有的统计数据都要加上一个正整数m。你能编程序完成小慧的任务吗?
输入:m
待修改的文档(字符串)
输出:修改后的文档(字符串)
例如:输入:13
There are 45 students in 32class.end
输出:There are 58 students in 32class.
解题思路:
这个题目由两个问题构成,一个是处理文档结尾处的“end”。一个是处理统计数据。
处理文档结尾处的“end”,需要判断出文档最后三个字母是不是“end”。先用length函数求出文档的长度,再copy函数截取文档最后三个字母和“end”进行比较。
处理统计数据关键在于获取空格的位置。利用pos函数可以取得空格的位置。
在处理整个文档时,先处理文档结尾处的“end”,然后一个一个单词进行处理。处理完一个单词就输出一个单词并从字符串中删除此单词及其后的空格。遇到统计数据则按题目要求处理。
需要注意的是,依题意,文档开头和结尾的数据不作统计数据处理。
程序:
program CS200803;
var
m,n:longint;
l,i,c,k:integer;
s,s1:string;
begin
readln(m);
readln(s);
l:=length(s);
if copy(s,l-2,3)='end' then delete(s,l-2,3);{删除文档结尾的'end'}
k:=pos(' ',s);{查找第一个空格的位置}
for i:=1 to k do write(s[i]);
delete(s,1,k);{输出并删除文档第一个单词。这一步主要是为了解决第一个单词是数据的情况,依题意,因前面没有空格,不做统计数据处理}
repeat
if (char(s[1])>=char('0')) and (char(s[1])<=char('9')) then{单词第一个字母是数字,则可能是统计数据}
begin
k:=pos(' ',s);
s1:=copy(s,1,k-1);
val(s1,n,c);{将此单词转换为数值}
if c=0 then{c=0则意味着转换过程中没有出错,单词完全由数字组成}
begin
write(n+m,' ');
delete(s,1,k);
end else begin
for i:=1 to k do write(s[i]);
delete(s,1,k);
end;
end else begin;{c<>0,意味着转换过程出错,单词不是统计数据}
k:=pos(' ',s);
for i:=1 to k do write(s[i]);
delete(s,1,k);
end;
until pos(' ',s)=0;{处理到最后一个空格为此,后面的不可能再为统计数据,因后面没有空格了}
write(s);{输出文档的剩余部分}
readln
end.
四、智力冲浪(100分)(存盘程序名:T4)
小慧准备参加湖南电视台举办的智力冲浪节目。规则如下:
冲浪者首先拥有m个快乐金球。冲浪当中设有n个游戏项目,每个游戏项目都必须在整分钟时开始,限时1分钟,而且都规定了最后完成期限(即:冲浪开始t分钟内必须完成)。如果一个游戏项目没按规定完成,则从冲浪者的快乐金球中扣掉一部分,不同游戏项目扣掉的金球数也不同。游戏项目的顺序自己安排。最终,赢得快乐金球数最多的选手胜出。
小慧非常想夺得冠军,请你计算出小慧最多能赢得多少个快乐金球?
输入:m n(m≤10000,n≤50)
n个整数(以空格相隔),分别表示每个游戏项目规定的完成期限(≤n)
n个整数(以空格相隔),分别表示每个游戏项目未完成时扣掉的金球数
输出:一个整数(最多能赢得快乐金球的个数)
例如:输入:10000 7
4 2 4 3 1 4 6
20 60 70 40 30 50 10
输出:9950
程序:
program CS200804;
var
m,n,i,j,t,time,s:integer;
a,b,c:array[1..50] of integer;
flag:boolean;
begin
readln(m,n);
for i:=1 to n do read(a[i]);
for i:=1 to n do read(b[i]);
for i:=1 to n do m:=m-b[i];
for i:=1 to n do
for j:=i+1 to n do begin
if a[i]>a[j] then begin
t:=a[i];a[i]:=a[j];a[j]:=t;t:=b[i];b[i]:=b[j];b[j]:=t;
end;end;{按照完成期限由短至长排序}
for i:=1 to n do
for j:=i+1 to n do begin
if (a[i]=a[j]) and (b[i]
t:=a[i];a[i]:=a[j];a[j]:=t;t:=b[i];b[i]:=b[j];b[j]:=t;
end;end;{相同完成期限的按从大到小排序}
{for i:=1 to n do write(a[i]:3);writeln;
for i:=1 to n do write(b[i]:3);writeln;}{测试用,查看排序结果}
for i:=1 to n do
for j:=i to n do if (a[j]=i) and (b[j]>c[i]) then begin
c[i]:=b[j];a[j]:=0;b[j]:=0;
end;{将每一完成期限的第一个值,即金球数最多的值填入数组c,数组c的下标对应完成期限}
{for i:=1 to n do write(a[i]:3);writeln;
for i:=1 to n do write(b[i]:3);writeln;
for i:=1 to n do write(c[i]:3);writeln;}{测试用}
for i:=1 to n do
for j:=i+1 to n do begin
if (b[i]
t:=a[i];a[i]:=a[j];a[j]:=t;t:=b[i];b[i]:=b[j];b[j]:=t;
end;end;{将剩余的数据从大到小排序}
for i:=1 to n do
for j:=i to n do if (a[j]>i) and (c[i]=0) then begin
c[i]:=b[j];a[j]:=0;b[j]:=0;
end;{将数据按照完成期限填入到数组C的空位中}
for i:=1 to n do
for j:=i+1 to n do begin
if a[i]>a[j] then begin
t:=a[i];a[i]:=a[j];a[j]:=t;t:=b[i];b[i]:=b[j];b[j]:=t;
end;end;{将剩余的数据按完成期限从短到长排序}
for i:=1 to n do
for j:=i to n do if (a[j]>i) and (b[j]>c[i]) then begin
c[i]:=b[j];a[j]:=0;b[j]:=0;
end;{用剩余的数据替换完成期限比它短,数值比它小的数}
{for i:=1 to n do write(a[i]:3);writeln;
for i:=1 to n do write(b[i]:3);writeln;
for i:=1 to n do write(c[i]:3);writeln;}{测试用}
for i:=1 to n do m:=m+c[i];
writeln(m);
readln;readln
end.
绩!
http://hubei.xiaoxiaotong.org/news/View.aspx?NewsId=3031
2008年湖北省小学数学奥林匹克决赛试题答案
1. 12.. 2.0.76. 3. 31. 4. 7. 5. 5. 6. .
7. 12. 8. 36. 9. 38. 10. 13. 11. 52. 12. 37.5.
9. 设大正方形的边长为 厘米,小正方形的边长为 厘米,则有 , ,可求得 , ,所以阴影部分的面积为 (平方厘米).
10. 答对13道题,答错2道B组题,其余题不答。
11. 不妨设 为“特殊数”的三个数字(不必互不相同),且 ,根据 的取值情况讨论.
如果 ,则 中必有一个为0,这样的三位数有9个,分别为100,200,300,…,900.
如果 ,则 ,这样的三位数有1个,即111.
如果 等于2,3,5,7中的某个数字,则 中必有一个为1,另一个等于 ,这样的三位数有12个,分别为122,212,221,133,313,331,155,515,551,177,717,771.
如果 =4,则三个数分别为1,4,4或2,2,4,这样的三位数有6个,分别为144,414,441,224,242,422.
如果 =6,则三个数分别为1,6,6或2,3,6,这样的三位数有9个,分别为166,616,661,236,263,326,362,623,632.
如果 =8,则三个数分别为1,8,8或2,4,8,这样的三位数有9个,分别为188,818,881,248,284,428,482,824,842.
如果 =9,则三个数分别为1,3,3或1,9,9,这样的三位数有6个,分别为133,313,331,199,919,991.
因此,在所有的三位数中,“特殊数”有9+1+12+6+9+9+6=52个.
12. 解 两人出发1分钟后,爸爸已经跑到B处,此时小明还没有到达B处,设两人在位置C处第一次相遇,此时两人共跑了400米,用时400÷(250+150)=1分钟,B和C之间的距离为205-200=50米.
两人第一次相遇后,爸爸跑过A点时,小明还没有到达A点,所以到两人(在位置D处)第二次相遇时,两人共跑了400+300=700米,用时700÷(250+150)=1.75分钟,C地D地间的距离为250×1.75-400=37.5米.
同样地,可以知道,两人第四次相遇的地点M与D之间的距离为37.5×2=75米,与B之间的距离为50+37.5+75=162.5米,从而爸爸从M跑到A经过的距离为200-162.5=37.5米.